我在網絡上的幾臺機器上遇到了一個非常奇怪的WMI問題。WMI - 無法通過IP地址連接到某些計算機
我有一塊軟件(.NET/C#)編寫,掃描本地網絡上的IP範圍,然後使用WMI查詢有關計算機的某些數據(計算機名稱,.NET框架版本等)。我最近遇到的一個問題是,這些機器的一小部分將不會響應通過其IP地址進行的WMI連接 - 它們只是拋出「RPC服務器不可用」異常,就像WMI沒有開始運行一樣。
這與C#應用程序,並試圖簡單的查詢,以返回計算機的名稱的VBScript的應用程序中出現兩個:
if wscript.arguments.count >= 1 then
host = wscript.arguments(0)
end if
if host = "" or isnull(host) then host = "."
connectionStr = "winmgmts:{impersonationLevel=impersonate}!\\" & host & "\root\cimv2"
wscript.echo connectionStr
set objWMIService = GetObject(connectionStr)
set objCompName = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
for each x in objCompName
wscript.echo x.Name
next
這將返回以下的結果:
C:\>nslookup BROKENCOMPUTER
Address: 192.168.1.123
C:\>cscript testwmi.vbs 192.168.1.123
winmgmts:{impersonationLevel=impersonate}!\\192.168.1.123\root\cimv2
C:\testwmi.vbs(9, 1) Microsoft VBScript runtime error: The remote server machine does not exist or is unavailable: 'GetObject'
C:\>cscript testwmi.vbs BROKENCOMPUTER
winmgmts:{impersonationLevel=impersonate}!\\BROKENCOMPUTER\root\cimv2
BROKENCOMPUTER
我可以如果我通過主機/計算機名稱引用計算機,仍然會打開WMI連接。我也可以通過IP地址(例如HTTP或RDP)連接到機器上運行的其他服務器 - 請求成功返回http://192.168.1.123。
爲了讓事情變得更加怪異,行爲甚至不一致。有時連接到IP會正常工作,並且分批發生。爲了測試這個問題,我設置了一個腳本,每隔5秒向所涉及的計算機反覆發送WMI請求,並記錄結果(以及結果趨勢)。我發現的是,所有請求都會失敗或成功處理大約一定數量的請求(180- 15分鐘間隔)或其倍數。示例:
- Start script
- 35 successful requests in a row
- 180 failed requests in a row
- 180 successful requests
- 360 failed requests
- 180 successful requests
- 180 failed requests
- 900 successful requests
- etc etc
然後我在兩臺機器上同時運行此腳本。我發現兩者之間的行爲是相似的(有幾分鐘的時間能夠連接並且無法連接),但兩者之間沒有同步;有兩個時期都可以連接,只有一個(或另一個)可以連接的時期,以及兩個都不可以連接的時期。
我知道這是一個令人難以置信的奇怪和具體的問題,我真的不希望任何人能夠立即解決它,但我想知道如果任何人有任何提示或方向?我在這裏和網絡人員交談過,他們和我一樣對這個問題感到困惑。