2015-12-28 48 views
1

我正在運行VBScript以在數百臺Windows 2000或Windows 2003主機上顯示DNS和WINS設置。腳本完成後,我想一眼就知道是否有服務器無法運行腳本/無法連接。 (我正在尋找類似的PowerShell catch塊,如果可能的東西)在輸出中顯示任何失敗的服務器

的腳本如下

Const FILEPATH = "C:\users\" 
'Get the input file 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set fsoFile = FSO.GetFile(FILEPATH & "servers.txt") 
strFilePath = fsoFile.Path 
Set fsoInput = FSO.OpenTextFile(strFilePath, 1) 

Do While Not fsoInput.AtEndOfStream 
    ComputerName = fsoInput.ReadLine 
    Call showdnswins(ComputerName) 
Loop 

Sub showdnswins(ComputerName) 
    On Error Resume Next 
    Set objWMIService = GetObject("winmgmts:\\" & ComputerName & "\root\cimv2") 
    Set config = objWMIService.ExecQuery _ 
     ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 
    For Each conf In config 
     WScript.Echo vbNewLine, "Host name is " & conf.dnshostname 
     WScript.Echo "WINS Primary is " & conf.winsprimaryserver 
     WScript.Echo "WINS Secondary is " & conf.winssecondaryserver 
     For Each strDNSServer In conf.DNSServerSearchOrder 
      WScript.Echo "DNS order is " & strDNSServer 
     Next 
    Next 
End Sub 

目前任何故障是未報告,並確定他們出數百臺服務器的耗時。

回答

1

VBScript中沒有與catch類似的東西。你必須自己實現錯誤處理。

On Error Resume Next 'enable error handling 
some statement 
If Err Then 
    'error handling and/or reporting goes here 
    Err.Clear 
End If 
other statement 
If Err Then 
    'error handling and/or reporting goes here 
    Err.Clear 
End If 
... 
On Error Goto 0  'disable error handling 

在您的特定情況下,你可能要檢查WMI連接產生的錯誤,並返回狀態:

Function showdnswins(ComputerName) 
    On Error Resume Next 
    Set objWMIService = GetObject("winmgmts:\\" & ComputerName & "\root\cimv2") 
    If Err Then 
    showdnswins = False 
    Exit Function 
    End If 
    ... 
    showdnswins = True 
End Function 

,這樣就可以處理的信息在你的Do循環:

Do Until fsoInput.AtEndOfStream 
    ComputerName = fsoInput.ReadLine 
    If Not showdnswins(ComputerName) Then 
    WScript.Echo ComputerName & " is not available." 
    End If 
Loop 

如果您需要更詳細的錯誤信息,您可以讓該函數返回數字狀態代碼或帶有詳細錯誤信息的對象,而不是一個布爾值。或者你可以添加一些錯誤日誌功能本身。

要一目瞭然地獲取有關故障服務器的信息,最好將錯誤與成功輸出分開,例如將錯誤和成功信息寫入不同的日誌文件並最多回顯其中一個,這樣他們就不會獲得混合。

另一種選擇,因爲你可能與cscript.exe運行腳本,是將錯誤信息寫入StdErr和成功信息StdOut

WScript.StdErr.WriteLine "some error message" 
WScript StdOut.WriteLine "regular information 

然後你就可以使用控制檯上的輸出重定向重定向操作符>(對於StdOut)和2>(對於StdErr):

cscript your.vbs >out.txt 2>error.log 
相關問題