1

Win7 (x64) で次のスクリプトを実行して、デフラグが必要なボリュームがあるかどうかを確認しようとしています。

Set VolumeList = GetObject("winmgmts:").ExecQuery("Select * from Win32_Volume")

For Each objVolume in VolumeList
    errResult = objVolume.DefragAnalysis(blnRecommended, objReport)
    If errResult = 0 then

        Wscript.Echo "Used space: " & objReport.UsedSpace
        Wscript.Echo "Volume name: " & objReport.VolumeName
        Wscript.Echo "Volume size: " & objReport.VolumeSize       
        If blnRecommended = True Then
            Wscript.Echo "This volume should be defragged."
        Else
            Wscript.Echo "This volume does not need to be defragged."
        End If
        Wscript.Echo
    Else
        MsgBox errResult
    End If
Next

このスクリプトを 2 つの異なる Win7 システムで実行しようとしました。

最初に、でOUT OF MEMORYエラーが発生しGetObject("winmgmts:").ExecQuery("Select * from Win32_Volume")ます。

2 番目に、 でOUT OF MEMORYエラーは発生しませんがGetObject、 が発生しますerror 11 (Unknown Error) in errResult (output of DefragAnalysis-method)

どちらの Win7 システムも同じ方法でインストールおよび構成されています。

おそらくこれは重要ではありませんが、WMI プロパティを確認すると"Connected to <Local Computer>"、(Win XP のように) and not と表示され"SUCCESSFULLY connected to <Local Computer>"ます。

4

2 に答える 2

0

コードは私にとっては問題なく機能しますが、適切な名前空間に明示的に接続すると役立つ場合があります。

 Set wmi = GetObject("winmgmts://./root/cimv2")
 Set VolumeList = wmi.ExecQuery("SELECT * FROM Win32_Volume")

また、ドライブ文字が割り当てられているローカル ディスクのみにクエリを制限することをお勧めします。

SELECT * FROM Win32_Volume WHERE DriveType = 3 AND DriveLetter IS NOT NULL

WBEMTestまたはを使用WMIDiagして、WMI 接続が機能しているかどうかを確認します。エラーと警告についても、アプリケーションシステムのイベントログを確認してください。

于 2013-06-24T09:38:42.130 に答える
0

エラー 11 の理由は、スクリプトが昇格された特権で実行されなかったためです。管理者として実行すると、正常に機能しました。ありがとう

于 2013-07-08T18:15:41.670 に答える