Win32::OLE "Member not found"

Win32::OLE "Member not found"

am 03.04.2008 18:09:33 von Adam.L.MacKinnon

Hi,

Am attempting to run the simple script as follows (sourced from:
http://techtasks.com/code/viewbookcode/443)

use strict;
use warnings;
use Data::Dumper;
use Win32::OLE;
$Win32::OLE::Warn = 3;

#use lib 'H:\dev\perl\NSLC-Store-Mgmt\lib';
#use NSLC::Store::Mgmt;

my %args;

$args{name} = 'TESTVAR';
$args{value} = 'TESTVALUE';
$args{target} = '.';

set_env_var(\%args);

sub set_env_var {
my ($args,) = @_;
my $strVarName = $args->{name};
my $strVarValue = $args->{value};
my $strComputer = $args->{target};

my $objVarClass = Win32::OLE->GetObject('winmgmts://' .
$strComputer . '/root/cimv2:Win32_Environment');
my $objVar = $objVarClass->SpawnInstanceobjVar->Name eq
$strVarName;
$objVar->{VariableValue} = $strVarValue;
$objVar->{UserName} = '';
$objVar->PutWScript->Echo('Created environment variable ' .
$strVarName);
}

The following message is returned.
retrying default method at C:/Perl/site/lib/Win32/OLE/Lite.pm line
156.
Win32::OLE(0.1403) error 0x80020003: "Member not found"
in METHOD/PROPERTYGET "" at H:\dev\perl\test\setenv.pl line 28
shell returned 9

I am completely new to using perl in a windows environment and am not
sure where to start debugging. I have read all that I can via module
docs and web information but am still having no luck.
As far as I can tell, syntactically the script is fine but I am not
sure how the guts of $objVarClass->SpawnInstanceobjVar->Name eq
$strVarName; is working. I am running this on XP pro using activeperl
5.8.8(820).

Any insight would be appreciated.

Thanks

Re: Win32::OLE "Member not found"

am 08.04.2008 11:09:22 von Thomas Kratz

Adam.L.MacKinnon@gmail.com wrote:
> Hi,
>
> Am attempting to run the simple script as follows (sourced from:
> http://techtasks.com/code/viewbookcode/443)

This code is buggy and I suspect nobody ever tested it.

> use strict;
> use warnings;
> use Data::Dumper;
> use Win32::OLE;
> $Win32::OLE::Warn = 3;
>
> #use lib 'H:\dev\perl\NSLC-Store-Mgmt\lib';
> #use NSLC::Store::Mgmt;
>
> my %args;
>
> $args{name} = 'TESTVAR';
> $args{value} = 'TESTVALUE';
> $args{target} = '.';
>
> set_env_var(\%args);
>
> sub set_env_var {
> my ($args,) = @_;
> my $strVarName = $args->{name};
> my $strVarValue = $args->{value};
> my $strComputer = $args->{target};
>
> my $objVarClass = Win32::OLE->GetObject('winmgmts://' .
> $strComputer . '/root/cimv2:Win32_Environment');
> my $objVar = $objVarClass->SpawnInstanceobjVar->Name eq
> $strVarName;

These have to be 2 statements:

my $objVar = $objVarClass->SpawnInstance_ # note the underscore
$objVar->{Name} = $strVarName;

> $objVar->{VariableValue} = $strVarValue;
> $objVar->{UserName} = '';
> $objVar->PutWScript->Echo('Created environment variable ' .
> $strVarName);

and again:

$objVar->Put_;
WScript->Echo('Created environment variable ' . $strVarName);
# at least I think so, I don't know WScript


> }
>
> The following message is returned.
> retrying default method at C:/Perl/site/lib/Win32/OLE/Lite.pm line
> 156.
> Win32::OLE(0.1403) error 0x80020003: "Member not found"
> in METHOD/PROPERTYGET "" at H:\dev\perl\test\setenv.pl line 28
> shell returned 9
>
> I am completely new to using perl in a windows environment and am not
> sure where to start debugging. I have read all that I can via module
> docs and web information but am still having no luck.
> As far as I can tell, syntactically the script is fine but I am not
> sure how the guts of $objVarClass->SpawnInstanceobjVar->Name eq
> $strVarName; is working. I am running this on XP pro using activeperl
> 5.8.8(820).

For using the WMI interface the M$ WMI Reference is the best information

http://msdn2.microsoft.com/en-us/library/aa394572%28VS.85%29 .aspx

Thomas

--
$/=$,,$_=,s,(.*),$1,see;__END__
s,^(.*\043),,mg,@_=map{[split'']}split;{#>J~.>_an~>>e~...... >r~
$_=$_[$%][$"];y,<~>^,-++-,?{$/=--$|?'"':#..u.t.^.o.P.r.>ha~.e..
'%',s,(.),\$$/$1=1,,$;=$_}:/\w/?{y,_, ,,#..>s^~ht<._..._..c....
print}:y,.,,||last,,,,,,$_=$;;eval,redo}#.....>.e.r^.>l^..>k ^.-

Re: Win32::OLE "Member not found"

am 08.04.2008 21:20:48 von Adam.L.MacKinnon

On Apr 8, 6:09 am, Thomas Kratz wrote:
> Adam.L.MacKin...@gmail.com wrote:
> > Hi,
>
> > Am attempting to run the simple script as follows (sourced from:
> >http://techtasks.com/code/viewbookcode/443)
>
> This code is buggy and I suspect nobody ever tested it.
>
>
>
> > use strict;
> > use warnings;
> > use Data::Dumper;
> > useWin32::OLE;
> > $Win32::OLE::Warn = 3;
>
> > #use lib 'H:\dev\perl\NSLC-Store-Mgmt\lib';
> > #use NSLC::Store::Mgmt;
>
> > my %args;
>
> > $args{name} = 'TESTVAR';
> > $args{value} = 'TESTVALUE';
> > $args{target} = '.';
>
> > set_env_var(\%args);
>
> > sub set_env_var {
> > my ($args,) = @_;
> > my $strVarName = $args->{name};
> > my $strVarValue = $args->{value};
> > my $strComputer = $args->{target};
>
> > my $objVarClass =Win32::OLE->GetObject('winmgmts://' .
> > $strComputer . '/root/cimv2:Win32_Environment');
> > my $objVar = $objVarClass->SpawnInstanceobjVar->Name eq
> > $strVarName;
>
> These have to be 2 statements:
>
> my $objVar = $objVarClass->SpawnInstance_ # note the underscore
> $objVar->{Name} = $strVarName;
>
> > $objVar->{VariableValue} = $strVarValue;
> > $objVar->{UserName} = '';
> > $objVar->PutWScript->Echo('Created environment variable ' .
> > $strVarName);
>
> and again:
>
> $objVar->Put_;
> WScript->Echo('Created environment variable ' . $strVarName);
> # at least I think so, I don't know WScript
>
>
>
> > }
>
> > The following message is returned.
> > retrying default method at C:/Perl/site/lib/Win32/OLE/Lite.pm line
> > 156.
> >Win32::OLE(0.1403) error 0x80020003: "Member not found"
> > in METHOD/PROPERTYGET "" at H:\dev\perl\test\setenv.pl line 28
> > shell returned 9
>
> > I am completely new to using perl in a windows environment and am not
> > sure where to start debugging. I have read all that I can via module
> > docs and web information but am still having no luck.
> > As far as I can tell, syntactically the script is fine but I am not
> > sure how the guts of $objVarClass->SpawnInstanceobjVar->Name eq
> > $strVarName; is working. I am running this on XP pro using activeperl
> > 5.8.8(820).
>
> For using the WMI interface the M$ WMI Reference is the best information
>
> http://msdn2.microsoft.com/en-us/library/aa394572%28VS.85%29 .aspx
>
> Thomas
>
> --
> $/=$,,$_=,s,(.*),$1,see;__END__
> s,^(.*\043),,mg,@_=map{[split'']}split;{#>J~.>_an~>>e~...... >r~
> $_=$_[$%][$"];y,<~>^,-++-,?{$/=--$|?'"':#..u.t.^.o.P.r.>ha~.e..
> '%',s,(.),\$$/$1=1,,$;=$_}:/\w/?{y,_, ,,#..>s^~ht<._..._..c....
> print}:y,.,,||last,,,,,,$_=$;;eval,redo}#.....>.e.r^.>l^..>k ^.-

Oh man....did I really miss that? Thanks, I have it somewhat working
now :).