Michael wrote:
> On Fri, 04 Dec 2009 17:10:26 -0800, Michael Ellery
> <mi...@s2technologies.com> wrote:
>> Michael wrote:
>>> Okay - Just to sum up the whole thing.
>>>
>>> The original VBScript <<EOF;
>>>
>>> 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
>>> EOF
>>>
>>> Returns the following:
>>>
>>> Child Group Count: 25
>>>
>>> Name: {36716FD8-E600-46FB-90CA-1263E0C62509}
>>> Name: {38FF8E8E-2DDC-4895-A7EB-0DC7DF50EC25}
>>> Name: {3E575181-0225-4553-9722-46F841B9FA76}
>>> Name: {8A412133-F571-42BC-8A66-4B242EB3BAC4}
>>> Name: {E14D965C-1FBB-40EC-A784-5F9F39F82281}
>>> Name: OpenView_AIX
>>> Name: OpenView_External
>>> Name: OpenView_HPUX
>>> Name: OpenView_Linux
>>> Name: OpenView_NNM
>>> Name: OpenView_OpenVMS
>>> Name: OpenView_OpenVMS(itanium)
>>> Name: OpenView_SNMP
>>> Name: OpenView_Solaris
>>> Name: OpenView_Tru64
>>> Name: OpenView_Unknown
>>> Name: OpenView_Windows2000
>>> Name: OpenView_WindowsNT
>>> Name: OpenView_WindowsServer2003
>>> Name: OpenView_WindowsServer2008
>>> Name: OpenView_WindowsVista
>>> Name: OpenView_WindowsXP
>>> Name: Root_Special
>>> Name: Root_Unix
>>> Name: Root_Windows
>>>
>>> And the Perl-Script with the modification <<EOF;
>>> #!perl
>>> use strict;
>>> use warnings;
>>> use Win32::OLE qw(in with);
>>> use Win32::OLE::Variant;
>>> use Data::Dumper;
>>>
>>> my $objWMIService =
>>> Win32::OLE->GetObject("winmgmts:root/HewlettPackard/OpenView/data") or
>>> die
>>> "WMI connection failed.\n";
>>> if (Win32::OLE-> LastError() != 0) {
>>>     print "Error calling GetObject: " . Win32::OLE->LastError() . "\n";
>>> exit 0;
>>> }
>>>
>>> my $objOV_NodeGroup = $objWMIService->Get("OV_NodeGroup");
>>> if (Win32::OLE-> LastError() != 0) {
>>>     print "Error calling Get: " . Win32::OLE->LastError() . "\n";
>>> exit 0;
>>> }
>>>
>>> my $objGetRoot = $objOV_NodeGroup->GetRoot();
>>> if (Win32::OLE-> LastError() != 0) {
>>>     print "Error calling GetRoot: " . Win32::OLE->LastError() . "\n";
>>> exit 0;
>>> }
>>>
>>> my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_VARIANT, 0);
>>> #my $nodes = Win32::OLE::Variant->new(VT_VARIANT|VT_BYREF);
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_BSTR, 0);
>>> #my $nodes = Win32::OLE::Variant->new(VT_DISPATCH|VT_BYREF);
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_VARIANT|VT_BYREF, 0);
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_BSTR|VT_BYREF, 0);
>>> #my $nodes = Win32::OLE::Variant->new(VT_VARIANT|VT_BYREF);
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_VARIANT|VT_BYREF, 0);
>>>
>>> my $objChildGroups = $objGetRoot->GetChildNodeGroups($nodes, "True");
>>> if (Win32::OLE-> LastError() != 0) {
>>>     print "Error calling GetChildNodeGroups: " . Win32::OLE->LastError() .
>>> "\n";
>>> exit 0;
>>> }
>>> print "Child Group Count: " . $objChildGroups . "\n";
>>>
>>> print Dumper($nodes);
>>>
>>>
>>> foreach my $objItem (in $nodes) {
>>>     print 'Name: ' . $objItem->{Name} . "\n";
>>> }
>>>
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_VARIANT, 0); Returns
>>> ##Child Group Count: 25
>>> ##$VAR1 = bless( do{\(my $o = 27197068)}, 'Win32::OLE::Variant' );
>>> ##Not a HASH reference at GetChildNodeGroups.pl line 46.
>>>
>>> #my $nodes = Win32::OLE::Variant->new(VT_VARIANT|VT_BYREF); Returns
>>> ##Child Group Count: 25
>>> ##$VAR1 = bless( do{\(my $o = 27197828)}, 'Win32::OLE::Variant' );
>>> ##Not a HASH reference at GetChildNodeGroups.pl line 46.
>>>
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_BSTR, 0); Returns
>>> ##Child Group Count: 25
>>> ##$VAR1 = bless( do{\(my $o = 27198308)}, 'Win32::OLE::Variant' );
>>> ##Not a HASH reference at GetChildNodeGroups.pl line 46.
>>>
>>> #my $nodes = Win32::OLE::Variant->new(VT_DISPATCH|VT_BYREF); Returns
>>> ##Error calling GetChildNodeGroups: Win32::OLE(0.1709) error 0x80010105:
>>> "The server threw an exception"
>>> ##    in METHOD/PROPERTYGET "GetChildNodeGroups"
>>>
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_VARIANT|VT_BYREF, 0);
>>> Returns
>>> ##Child Group Count: 25
>>> ##$VAR1 = bless( do{\(my $o = 27199076)}, 'Win32::OLE::Variant' );
>>> ##Not a HASH reference at GetChildNodeGroups.pl line 46.
>>>
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_BSTR|VT_BYREF, 0);
>>> Returns
>>> ##Child Group Count: 25
>>> ##$VAR1 = bless( do{\(my $o = 27197684)}, 'Win32::OLE::Variant' );
>>> ##Not a HASH reference at GetChildNodeGroups.pl line 46.
>>>
>>> #my $nodes = Win32::OLE::Variant->new(VT_VARIANT|VT_BYREF); Returns
>>> ##Child Group Count: 25
>>> ##$VAR1 = bless( do{\(my $o = 27199620)}, 'Win32::OLE::Variant' );
>>> ##Not a HASH reference at GetChildNodeGroups.pl line 46.
>>>
>>> #my $nodes = Win32::OLE::Variant->new(VT_ARRAY|VT_VARIANT|VT_BYREF, 0);
>>> Returns
>>> ##Child Group Count: 25
>>> ##$VAR1 = bless( do{\(my $o = 27199524)}, 'Win32::OLE::Variant' );
>>> ##Not a HASH reference at GetChildNodeGroups.pl line 46.
>>>
>>> Does any of this, make any sense to you guys?
>>>
>>> /Michael
>>>
>>
>> so, it looks like your Dumper statement is indicating a valid object in
>> most cases. I think the problem on your loop is that you are using the
>> 'in' adapter, which requires the object to be IEnumerable. A variant
>> array is not enumerable (I believe) - so just try treating it like an
>> array, maybe something like this
>>
>> foreach my $objItem (@$nodes) {
>>    print 'Name: ' . $objItem->{Name} . "\n";
>> }
>>
>>
>> -Mike
> 
> Well it just changes the error to:
> 
> Child Group Count: 25
> $VAR1 = bless( do{\(my $o = 27200092)}, 'Win32::OLE::Variant' );
> Not an ARRAY reference at GetChildNodeGroups.pl line 46.
> 
> Damn this is complicated :-S
> 
> /Michael
> _______________________________________________
> Perl-Win32-Users mailing list
> Perl-Win32-Users@listserv.ActiveState.com
> To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
> 

okay - two more possibilities:

foreach my $objItem ($nodes->Value()) {
    print 'Name: ' . $objItem->{Name} . "\n";
}

OR (not sure if Value returns an arrayref or an array...)

foreach my $objItem (@{$nodes->Value()}) {
    print 'Name: ' . $objItem->{Name} . "\n";
}

or, perhaps even:

for (my $i = 0; $i != $objChildGroups; $i++) {
    print 'Name: ' . $nodes->Get($i)->{Name} . "\n";
}

(I'm just going based on Win32::OLE::Variant docs). HTH.

-Mike



_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to