0

我正在尝试检查办公室的一些远程服务器上的硬盘空间。下面的文件可以正常调试,但文本文件中没有输出。我已经尝试过 PS 和其他 VB 代码,它们似乎可以工作,但我需要或至少希望将数据保存在文本文件中以便保存。

想法?

arrServers = Array("server.domain.net", "server2.domain.net", "server3.domain.net")
strFilePath = "freespace.txt"

On Error Resume Next
Set objFso = CreateObject("Scripting.FileSystemObject")
Set oFile = objFso.OpenTextFile(strFilePath, 2, vbTrue)

If Not IsNothing(oFile) Then
For Each strComputer In arrServers
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    If objWMIService Then
        Set colDiskDrives = objWMIService.ExecQuery _
            ("Select * from Win32_PerfFormattedData_PerfDisk_LogicalDisk Where " _
                & "Name <> '_Total'")

        For Each objDiskDrive In colDiskDrives
            oFile.WriteLine "Drive", objDiskDrive.Name, "on", strComputer, "has", _
            objDiskDrive.FreeMegabytes & "MB (" & objDiskDrive.PercentFreeSpace & "%) Free"
        Next

    Else
        oFile.WriteLine "Could not connect to " & strComputer
    End If

Next

Else
    WScript.Echo "Could not open text file."

End If
4

2 回答 2

1

删除 on error resume next 并运行它。你看到了什么?

我认为这可能是你的问题:

If Not IsNothing(oFile) Then 

应该是

If Not oFile Is Nothing Then 
于 2012-06-19T20:18:06.300 回答
0

虽然在蒂姆的回答中正确识别了 EVIL Global OERN,但检查“oFile Is Nothing”的“应该”是误导性的。

这段代码

  Dim goFS      : Set goFS  = CreateObject( "Scripting.FileSystemObject" )
  Dim sBadFSpec : sBadFSpec = ".\nix\nix.txt"
  Dim tsOut, bIsNothing
 On Error Resume Next
  Set tsOut = goFS.OpenTextFile(sBadFSpec, ForWriting, True)
  If 0 <> Err.Number Then WScript.Echo "Bingo!", Err.Description 
 On Error GoTo 0
  WScript.Echo "tsOut:", VarType(tsOut), TypeName(tsOut)
 On Error Resume Next
  bIsNothing = tsOut Is Nothing
  If 0 <> Err.Number Then WScript.Echo "Bingo!", Err.Description 
 On Error GoTo 0

及其输出:

Bingo! Path not found
tsOut: 0 Empty
Bingo! Object required

显示:

  1. 如果 .OpenTextFile() 失败,则您尝试分配给 (tsOut) 的变量不变,即空(如果我们排除重复使用变量)
  2. 将 Is Nothing 应用于非对象(例如 Empty)变量会引发错误
  3. 检查 Is Nothing 不是检查 .Open/CreateTextFile() 结果的正确方法。

更新

Tim 的评论让我意识到上述内容仅适用于 VBScript(这里未初始化的变量是空子类型的普通变体)。我对 VBA 一无所知,但我相信 Tim 对 oFile Is Nothing 的测试是该语言的有效策略。

于 2012-06-19T22:02:21.580 回答