2010-12-22 3 views
2

win32 :: ole 모듈과 WMI 쿼리를 사용하여 원격 Windows 컴퓨터에서 이벤트 로그 정보를 가져올 스크립트를 작성하려고합니다. 컴퓨터를 ping 할 수는 있지만 ConnectServer() 메서드를 사용하여 WMI 연결이 항상 실패하더라도 상관 없습니다. 나는 방화벽 관련 문제가 아니라고 확신한다. 내 코드는 다음과 같습니다.WMI와 Perl을 사용하여 원격 컴퓨터에 연결할 수 없습니다.

use Win32::OLE qw(in); 
use Net::Ping; 

use constant wbemFlagReturnImmediately => 0x10; 
use constant wbemFlagForwardOnly => 0x20; 

my $computer = "10.10.10.15"; 

my $user = "Administrator"; 
my $pwd = "pass"; 


$p = Net::Ping->new(); 
print "$computer is alive.\n" if $p->ping($host); 
$p->close(); 

    my $locatorObj =Win32::OLE->new("WbemScripting.SWbemLocator") or die "ERROR CREATING OBJ"; 

    $locatorObj->{Security_}->{impersonationlevel} = 3; 

    my $objWMIService = $locatorObj->ConnectServer($computer, "root\civm2", $user, $pwd) or die "WMI connection failed.\n"; 

    my $colItems = $objWMIService->ExecQuery("SELECT * FROM Win32_NTLogEvent", "WQL", 
       wbemFlagReturnImmediately | wbemFlagForwardOnly); 

    foreach my $objItem (in $colItems) { 
     print "Category: $objItem->{Category}\n"; 
     print "CategoryString: $objItem->{CategoryString}\n"; 
     print "ComputerName: $objItem->{ComputerName}\n"; 
     print "Data: " . join(",", (in $objItem->{Data})) . "\n"; 
     print "EventCode: $objItem->{EventCode}\n"; 
     print "EventIdentifier: $objItem->{EventIdentifier}\n"; 
     print "EventType: $objItem->{EventType}\n"; 
     print "InsertionStrings: " . join(",", (in $objItem->{InsertionStrings})) . "\n"; 
     print "Logfile: $objItem->{Logfile}\n"; 
     print "Message: $objItem->{Message}\n"; 
     print "RecordNumber: $objItem->{RecordNumber}\n"; 
     print "SourceName: $objItem->{SourceName}\n"; 
     print "TimeGenerated: $objItem->{TimeGenerated}\n"; 
     print "TimeWritten: $objItem->{TimeWritten}\n"; 
     print "Type: $objItem->{Type}\n"; 
     print "User: $objItem->{User}\n"; 
     print "\n"; 
    } 

연결 시도가 항상 실패하는 이유는 무엇입니까? 감사합니다 :)

답변

1

ConnectServer 호출이 잠재적 인 문제의 몇 가지가 있습니다

  • 내가 다시 두 개의 슬래시를 필요로 생각합니다.
  • 그리고 그것은 오타가 있습니다 civm2 -> cimv2를

그리고 오류 정보를 검색하기 위해 전화를 추가하여 더 많은 정보가 공개 될 수 있습니다

my $objWMIService = $locatorObj->ConnectServer($computer, "root\\cimv2", $user, $pwd) 
     or die "WMI connection failed.\n", Win32::OLE->LastError; 
+0

아 풍어 civm2-> CIMV2에 있습니다. 나는이 변화를 만들려고 노력했지만 여전히 그 변화는 없다. 나는 cimv2 철자가 잘못된 채로 이것을 얼마나 오랫동안 사용해 왔는지 궁금합니다 ... 이것은 원격 컴퓨터에서 실행되는 WMI 스크립트의 첫 번째 시도입니다. 나는 옳은 길을 걷고있는 것처럼 보입니까? – MilqueToasted

+0

나는이 두 가지 변화를 만들어 내 자신의 PC에 맞춰서 작동시킬 수있었습니다. 방금 네트워크의 다른 컴퓨터에 대해 시도했지만 실패했습니다. 그러나이 경우 방화벽 문제를 의심하고 있으므로 더 이상 조사하지 않았습니다. 'my $ user = "somedomain \\ username"; ' –

+0

컴퓨터와의 통신을 시도했기 때문에 내 문제가 방화벽과 관련이 없다는 것을 확신합니다. 방화벽이 없습니다 ... 컴퓨터가 작업 그룹에 속하는지 도메인에 있는지에 대해 궁금합니다. 내가 그걸 가지고 계속 놀아 올거야. – MilqueToasted

관련 문제