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
鑑於這種情況,我猜問題與網絡有關,但我們現在正在一個我不熟悉的國家開展工作。有沒有我錯過的參數和/或我做事情的方式有什麼問題?
感謝您的回答!