2012-06-19 96 views
0

我試圖檢查辦公室的一些遠程服務器上的硬盤驅動器空間。下面的文件調試很好,但是在文本文件中沒有輸出。我試過PS和其他VB代碼,他們似乎工作,但我需要或至少希望獲得在文本文件中的數據,以便它可以被保存。腳本來檢查遠程Windows硬盤驅動器的可用空間

想法?

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 

回答

1

刪除錯誤恢復下一步並運行它。你看到了什麼?

我想這可能是你的問題:

If Not IsNothing(oFile) Then 

或許應該

If Not oFile Is Nothing Then 
+0

+1.5確定罪魁禍首,-0.5暗示Is-Nothing-測試是合理的。 –

+0

謝謝,週一我會在辦公室試試這個! – ZeroCool898

0

而在蒂姆的回答邪惡全球OERN被正確識別,將「應該」 WRT,以檢查「 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. A pplies對於非對象來說是Nothing(例如空)變量會引發錯誤
  3. 檢查是否Nothing不是檢查.Open/CreateTextFile()結果的正確方法。

UPDATE

蒂姆的評論讓我意識到,上述適用於VBScript中只(這裏未初始化的變量是普通的亞型空的變體)。對於VBA一無所知,我相信Tim對oFile Is Nothing的測試是該語言的有效策略。

+1

我正在考慮VBA標記(儘管也許WScript應該提示我),並且OP可能(至少)將oFile聲明爲「Object」。如你所示,這不是一個好的假設! –