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

Timの回答では、EVIL Global OERNは正しく識別されていますが、「oFileIsNothing」をチェックするための「すべき」ことは誤解を招く恐れがあります。

このコード

  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を適用すると、エラーがスローされます
  3. Check for Is Nothingは、.Open / CreateTextFile()の結果をチェックする正しい方法ではありません。

アップデート

Timのコメントにより、上記はVBScriptにのみ当てはまることがわかりました(ここでは、初期化されていない変数はサブタイプEmptyのプレーンなバリアントです)。VBAについて何も知らないので、oFileIsNothingのテストがその言語で有効な戦略であるとTimを信頼しています。

于 2012-06-19T22:02:21.580 に答える