in reply to Re: Setting a WMI value using Perl Win32::OLE
in thread Setting a WMI value using Perl Win32::OLE

First, thanks for nudging me to check the error OLE codes/messages that will be useful even if it doesn't solve my current problem. (I also discovered that enabling the Option: Warn => 2 calls Carp::carp for each error:

Win32::OLE->Option(Warn => 2);


Second, no error (0 return) is returned for the Assignment, the LetProperty, or (I added a) SetProperty.

The Put, SetInfo, and Quit (which I also added) all return:

Win32::OLE(0.1709) error 0x80020003: "Member not found" in METHOD/PROPERTYGET "" at D:\dev\ch\srp2.pl line 27


So it seems the setting of the property is accepted, but it never gets updated at the actual data store. ADSI usually requires the "SetInfo" in VBS which is the reason I (semi-randomly) tried adding that. Put is mentioned in the Win32::OLE docs, and Quit was alluded to as if it might finish a 'transaction'.

I have of course tried each separately.

Replies are listed 'Best First'.
Re^3: Setting a WMI value using Perl Win32::OLE
by Anonymous Monk on Jul 10, 2011 at 20:29 UTC
Re^3: SOLVED Put_ UNDERSCORE: Setting a WMI value using Perl Win32::OLE
by HerbM (Novice) on Jul 10, 2011 at 22:57 UTC
    Turns out that Put_() has an UNDERSCORE even though the Win32::OLE docs (vaguely) give this as merely "Put()" -- use the underscore and it works.
    my ($init, $max) = (256, 301); for (in($PageFiles)) { showProperties($_); $_->{InitialSize} = $init; $_->{MaximumSize} = $max; $_->LetProperty('InitialSize', $init); $_->LetProperty('MaximumSize', $max); $_->SetProperty(InitialSize => $init); $_->SetProperty(MaximumSize => $max); $_->Put_() # with UNDERSCORE in method name and print "3 Put_: " . Win32::OLE->LastError . "\n\n"; last; # just change 1st one }
    Another thread here indicated the "Exec Query" SQL like interface is READ ONLY and offered the getting "instances
    #my $PageFiles = $wmiService->ExecQuery("Select * from Win32_PageFileS +etting"); my $PageFiles = $wmiService->InstancesOf("Win32_PageFileSetting");
    But that had nothing to do with my problem -- both methods work as long as you use the proper Put_ (with underscore) method. All 3 setting methods (hash assign, Let, and Set) seem to work fine even though not sure the differences if any.

      Turns out that Put_() has an UNDERSCORE even though the Win32::OLE docs (vaguely) give this as merely "Put()" -- use the underscore and it works.

      You're severely confused, the two aren't related at all.

      Put is a Win32::OLE::Variant method

      Put_ is an OLE object method, SWbemObject.Put_ Method