- 论坛徽章:
- 0
|
回复 4# jason680
十分感谢jason680!!! 根据你说的改了,程序正常运行了。
我理解你的意思是括号不能直接带入到调用中去,必须重新用正则匹配出括号中参数,然后重新调用。
为了放便后来人学习,我把完整代码重新贴一下:
- use strict;
- use Win32::OLE qw(in);
- use Win32::OLE::Variant;
- my $DEBUG=0;
- my $strComputer = '.';
- my $objWMIService = Win32::OLE->GetObject('winmgmts:' .
- '{impersonationLevel=impersonate}!\\\\' . $strComputer .
- '\\root\\cimv2');
- my $wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = TRUE';
- my $results = $objWMIService->ExecQuery($wql);
- print "The System Information of this computer is as follows:\n\n";
- foreach my $obj (in $results) {
- print "NAC : ", $obj->Caption, "\n";
- print "IP : ", $obj->IPAddress(0), "\n";
- print "MAC : ", $obj->MACAddress, "\n";
- }
- print "*************** 1 ***************\n";
- sub get_wmi {
- my($InstancesOf,$objSWbemObject,$Name,$Where) = @_;
- my $strComputer = '.';
- my $objWMIService = Win32::OLE->GetObject('winmgmts:' .
- '{impersonationLevel=impersonate}!\\\\' . $strComputer .
- '\\root\\cimv2');
- my $wql;
- if($Where eq ''){
- $wql = "SELECT * FROM $InstancesOf";
- }else{
- $wql = "SELECT * FROM $InstancesOf Where $Where";
- }
- print "***************\tDebug ",$wql,"\t***************\n" if $DEBUG;
- print "***************\tDebug ",$objSWbemObject,"\t***************\n" if $DEBUG;
- my $results = $objWMIService->ExecQuery($wql);
- my $lines=1;
- foreach my $obj (in $results) {
- print "***************\tDebug ",$lines++,"\t***************\n" if $DEBUG;
- if($objSWbemObject !~ s/[(]([^)]+)[)]//){
- print "$Name\t\t\t:", $obj->$objSWbemObject, "\n";
- }
- else{
- print "$Name\t\t\t:", $obj->$objSWbemObject($1) , "\n";
- }
- }
- }
- get_wmi 'Win32_NetworkAdapterConfiguration','Caption','NAC','IPEnabled = TRUE';
- get_wmi 'Win32_NetworkAdapterConfiguration','IPAddress(0)','IP','IPEnabled = TRUE';
- get_wmi 'Win32_NetworkAdapterConfiguration','MACAddress','MAC','IPEnabled = TRUE';
- print "*************** 2 ***************\n";
复制代码
|
|