我正在运行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
目前任何故障都没有报告,并且从数百台服务器中识别它们非常耗时。
答案 0 :(得分: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
如果您需要更详细的错误信息,可以让函数返回数字状态代码或带有详细错误信息的对象,而不是布尔值。或者您可以向函数本身添加一些错误记录。
要一目了然地获取有关失败服务器的信息,最好将错误与成功输出分开,例如将错误和成功信息写入不同的日志文件并回显最多其中一个,这样他们&# 39;不要混淆。
另一个选项,因为您可能正在使用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