wmi查询不返回特定服务器的数据

问题描述:

我有下面的perl脚本来从不同的服务器获取网站信息。该脚本工作正常,除了一台服务器。wmi查询不返回特定服务器的数据

#!C:/perl/bin/perl 
use strict; 
use Win32::OLE('in');   # WMI access and optimised flags 

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

my $computer = "servername"; 

my $wmiWebObject = Win32::OLE->GetObject("WinMgmts:{impersonationLevel=impersonate,authenticationLevel=PktPrivacy}!//$computer/root/WebAdministration"); 
my $sites = $wmiWebObject->ExecQuery("SELECT Name from Site", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly); 
foreach my $site (in $sites) { 
    print "\nSite Name : " . $site->{Name} . "\n"; 
} 

我可以使用Powershell获取站点信息,而不是使用Perl。

Get-WmiObject -Impersonation impersonate -Authentication PacketPrivacy -ComputerName servername -Namespace root/WebAdministration -Query "select Name from Site" | Select-Object {$_.Name} 

请有人可以建议为什么Perl脚本不能只为一台服务器工作,而powershell正在为同一台服务器工作。

所以我可以通过简单地重新启动服务器上的WMI服务来解决问题。我发现this文章很有用。