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

我试图在两个不同的 Win7 系统上运行这个脚本。

首先,我OUT OF MEMORYGetObject("winmgmts:").ExecQuery("Select * from Win32_Volume").

在第二个,我没有得到OUT OF MEMORY错误GetObject,但我得到了error 11 (Unknown Error) in errResult (output of DefragAnalysis-method)

两个 Win7 系统都以相同的方式安装和配置。

也许这并不重要,但是当我检查 WMI 属性时,它说"Connected to <Local Computer>"而不是(如在 Win XP 中)"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

使用WBEMTestWMIDiag检查您的 WMI 连接是否正常工作。检查应用程序系统事件日志是否有错误和警告。

于 2013-06-24T09:38:42.130 回答
0

错误 11 的原因是脚本没有以提升的权限运行。以管理员身份运行后,它运行良好。谢谢

于 2013-07-08T18:15:41.670 回答