在输出中显示任何失败的服务器

时间:2015-12-28 22:25:13

标签: vbscript

我正在运行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 个答案:

答案 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