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