检查碎片状态时出错

时间:2013-06-24 07:08:24

标签: windows-7 vbscript wmi

我正在尝试在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 MEMORY上收到GetObject("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>"

2 个答案:

答案 0 :(得分:0)

Code对我来说很好,但是当你明确连接到正确的命名空间时它可能会有所帮助:

 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连接是否正常运行。检查应用程序系统事件日志中的错误和警告。

答案 1 :(得分:0)

错误11的原因是脚本未使用提升的权限运行。一旦它以管理员身份运行,它运行正常。感谢