![]() |
|
|
|||||||
| Home | Forums | Register | Rules & FAQ | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here. Shell Script Page. |
Other UNIX.COM Threads You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Having a problem with a FTP Script using perl | scottzx7rr | Shell Programming and Scripting | 6 | 12-19-2007 02:26 PM |
| Calling a perl script from a perl script | new2ss | Shell Programming and Scripting | 3 | 02-06-2007 07:17 PM |
| Perl script strange problem | vaibhav | Shell Programming and Scripting | 2 | 11-23-2006 03:08 AM |
| Perl: Run perl script in the current process | vino | Shell Programming and Scripting | 10 | 12-09-2005 06:45 AM |
| Problem executing setuid script in perl-5.8.6 | sarmakdvsr | Shell Programming and Scripting | 0 | 08-22-2005 11:11 PM |
![]() |
|
|
Submit Tools | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
|||
|
PERL script problem
Hi all, i wrote this script and the code appears to work except i cannot connect to the WMI interface on Windows XP boxes. The listing is printed for testing purposes so i know that part works. When it tries to connect to WMI, the script dies. Should echo these properties to me. I think the problem is in the array, but not sure how to fix it. Can you all help?
Code:
use Win32::OLE('in');
use constant wbemFlagReturnImmediately => 0x10;
use constant wbemFlagForwardOnly => 0x20;
#use Win32::AdminMisc;
#Read from your selected file, make sure the path is right; you must use \\ or UNC \\\\
$computer="c:\\list\\hosts.txt \n";
open(DATA,$computer) or die "Could not open File!, check the path! \n";
@raw_list=<DATA>;
print @raw_list;
close(DATA)
foreach($computer, @raw_list);
$objWMIService = Win32::OLE->GetObject
("winmgmts:\\\\$computer\\root\\CIMV2") or die "WMI connection failed.\n";
$colItems = $objWMIService->ExecQuery
("SELECT * FROM Win32_OperatingSystem","WQL",wbemFlagReturnImmediately | wbemFlagForwardOnly);
foreach my $objItem (in $colItems)
{
print "Caption: $objItem->{Caption}\n";
print "CSD Version: $objItem->{CSDVersion}\n";
print "CS Name: $objItem->{CSName}\n";
print "Name: $objItem->{Name}\n";
print "Service Pack Major Version: $objItem->{ServicePackMajorVersion}\n";
print "System Directory: $objItem->{SystemDirectory}\n";
print "Windows Directory: $objItem->{WindowsDirectory}\n";
print "\n";
}
dont beat me to profusely with a stick; its not under my control that they are all Windows boxes ![]() |
| Forum Sponsor | ||
|
|
|
|||
|
Perl doesn't have the foreach() loop syntax like that, I think. It looks more like Javascript or PHP than Perl. I guess you should try to quote any error messages if any, and indicate which line the error exists. The segment you posted does not appear to be a correct Perl program.
|
|
|||
|
Quote:
I tried that and get a 255 error. if i change it to foreach(@raw_list) or foreach($computer) i get an error 9 here is the error, substitute 255 for the 9 WMI connection failed. host1 host2 host3 Exit code: 9 , 0009h I'm sure it is with the array, but damn if i can figure it out! Where do i find the system error codes such as 9 or 255?EDIT: ok, i ran the script with perl -w and this is what i received Odd number of elements in hash assignment at retina.pl line 21, <DATA> line 3. Win32::OLE(0.1707) error 0x80041021 after character 0 in "winmgmts:\\c:\list\hosts.txt \root\CIMV2" at retina.pl line 30 eval {...} called at retina.pl line 30 WMI connection failed. so basically, what i gather from this is that it may not even be connecting to the WMI service to begin with? And for some reason it is reading what is supposed to be a hostname as the literal filename and path. Am i on the right track here? thank you Last edited by caddyjoe77 : 07-06-2007 at 04:00 AM. Reason: ran with perl -w to report errors....wanted to update post instead of making a reply to me; answering yourself means insanity |
|
||||
|
Hi, cbkihong.
An aside. Quote:
Code:
#!/usr/bin/perl
# @(#) perl-basic Template for common usage.
# use warnings;
# use strict;
my($debug);
$debug = 0;
$debug = 1;
my(@a) = qw/ a b c d e /;
my($a) = @a;
foreach my $i ( in $a ) {
print " i is :$i:\n";
}
exit(0);
Code:
% ./p1 Can't locate object method "in" via package "a" (perhaps you forgot to load "a"?) at ./p1 line 15. I think we both looked at this and saw a corruption of the foreach with syntax from some other language. However, almost anything seems to be legal in perl. So, at least from my perspective, I was led to the wrong conclusion by assuming a syntax infraction. Even if one enables strict and warnings, the same message is produced ... cheers, drl |
||||
| Google UNIX.COM |