Michael <> wrote:
> Hi,
>
> I'm a novice regarding Perl, and need some help converting a VBScript
> to a PerlScript.
>
> The following VBScript returns some data from HP OpenView. The
> GetChildNodeGroups method returns the number of ChildGroups,
>
> and the [out] parameter NodeGroups returns an array which contains a
> list of OV_NodeGroup.
>
>> From the documentation:
>
> sint32 GetChildNodeGroups(
> [out] OV_NodeGroup NodeGroups[],
> [in, optional] boolean IncludeSubGroups)
>
> Description
> Returns a list of node groups (instances of OV_NodeGroup) that are
> children of this node group.
>
> Return Value
> Number of node groups (children) in the out parameter NodeGroups.
>
> ' VBScript Begin
>
> Option Explicit
>
> Dim objWMIService, objOV_NodeGroup, objGetRoot, objChildGroups,
> arrNodes, objItem
>
> Set objWMIService =
> GetObject("winmgmts:root\HewlettPackard\OpenView\data")
>
> Set objOV_NodeGroup = objWMIService.Get("OV_NodeGroup") Set
> objGetRoot = objOV_NodeGroup.GetRoot() objChildGroups =
> objGetRoot.GetChildNodeGroups(arrNodes, True)
>
> WScript.Echo "Child Group Count: " & objChildGroups & vbCrLF
>
> For Each objItem In arrNodes
> WScript.Echo "Name: " & objItem.Name
> Next
>
> ' VBScript End
>
> The problem is that I can't find out how to get the array (@arrNodes)
> in Perl.
>
> # PerlScript Begin
> use strict;
> use warnings;
> use Win32::OLE qw(in with);
> use Data::Dumper;
>
> my $objWMIService =
> Win32::OLE->GetObject("winmgmts:root/HewlettPackard/OpenView/data")
> or die "WMI connection failed.\n"; my $objOV_NodeGroup =
> $objWMIService->Get("OV_NodeGroup"); my $objGetRoot =
> $objOV_NodeGroup->GetRoot();
>
> my @arrNodes;
>
> my $objChildGroups = $objGetRoot->GetChildNodeGroups("@arrNodes",
> "True");
And you were doing so well up to this point. I really don't think that
you want to pass an empty array, interpolated into a string, as an
output parameter. In fact, I would expect that it might even produce a
run-time error. Does it?
I don't know the answer, but from my limited Perl/OLE experience, my
first guess would be that the function would want to return an OLE
container object in the output parameter, and so would expect it to be a
reference to a scalar. For example:
my $nodes;
use constant TRUE => 1;
my $objChildGroups = $objGetRoot->GetChildNodeGroups(\$nodes, TRUE);
>
> print "Child Group Count: " . $objChildGroups . "\n";
>
> print @arrNodes . "\n";
If I am right, and I may well not be, this would probably need to be
something like:
for my $obj (in $nodes) {
print "Name: $obj->{Name}\n";
}
>
> # PerlScript End
>
> Any help would be appreciated.
HTH, in lieu of somebody coming up with a more certain answer.
--
Brian Raven
This e-mail may contain confidential and/or privileged information. If you are
not the intended recipient or have received this e-mail in error, please advise
the sender immediately by reply e-mail and delete this message and any
attachments without retaining a copy.
Any unauthorised copying, disclosure or distribution of the material in this
e-mail is strictly forbidden.
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs