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
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to