2014-10-20 84 views
6

我正在使用perl腳本來檢查是否有多個服務正在運行。爲了實現這一目標,我們使用WMI查詢遠程Windows服務器:當我開發的筆記本電腦執行WMI查詢返回的結果不完整

my $WMI_locator = Win32::OLE->new('WbemScripting.SWbemLocator'); 
$WMI_locator->{Security_}->{AuthentificationLevel} = 6; 
my $computer = $WMI_locator->ConnectServer($server, 'root\cimv2', $adminuser, $adminpasswd); 
my $services = $computer->ExecQuery('SELECT * FROM Win32_Service', 'WQL', $flag_return_immediately | $flag_forward_only); 

這段代碼完美。但是,當我嘗試從生產服務器運行它時發生了奇怪的事情:對於某些遠程Windows計算機,我只能獲得大約一半的服務列表。

我對此進行了研究,發現問題只發生在服務器很多(約150)的服務器上,並且平均ping有差異(本地約60ms,生產約215ms服務器)。這個問題似乎來自WMI而不是perl;我試圖從DOS命令行查詢服務器,我越來越想獲得服務時的錯誤,雖然查詢CPU工作得很好:

E:\>wmic /NODE:server /USER:adminuser /PASSWORD:adminpasswd SERVICE GET Caption, State 
Node - server 
ERROR: 
Code = 0x800706be 
Description = The remote procedure call failed. 
Facility = Win32 

E:\>wmic /NODE:server /USER:adminuser /PASSWORD:adminpasswd CPU GET Name, Status 
Name            Status 
Intel(R) Xeon(R) CPU   X5650 @ 2.67GHz OK 
Intel(R) Xeon(R) CPU   X5650 @ 2.67GHz OK 
Intel(R) Xeon(R) CPU   X5650 @ 2.67GHz OK 
Intel(R) Xeon(R) CPU   X5650 @ 2.67GHz OK 

鑑於這種情況,我猜問題與網絡有關,但我們現在正在一個我不熟悉的國家開展工作。有沒有我錯過的參數和/或我做事情的方式有什麼問題?

感謝您的回答!

回答

1

此錯誤幾乎總是(儘管不是唯一的)由不同版本的SQL Server的多個實例引起的。爲了縮小問題,請嘗試WMI Diagnostic Utility,它旨在幫助解決這類問題。