【发布时间】:2011-02-19 02:51:42
【问题描述】:
我正在尝试使用 DefragAnalysis 方法打印(到文本文件)Win32_Volume 类提供的碎片信息,并提出了以下 VB.NET 代码:
Dim objReader As StreamWriter
objReader = New StreamWriter(FolderBrowserDialog.SelectedPath + "\FragInfo" + "_" + CreationDate + ".txt")
Dim colItemsFragInfo As New ManagementObjectSearcher("root\CIMV2", "Select * from Win32_Volume where DriveType = 3")
For Each queryObj As ManagementObject In colItemsFragInfo.Get()
objReader.WriteLine("Analyzing volume " + queryObj("DriveLetter"))
Dim InParams As ManagementBaseObject = queryObj.GetMethodParameters("DefragAnalysis")
Dim OutParams As ManagementBaseObject = queryObj.InvokeMethod("DefragAnalysis", InParams, Nothing)
MsgBox(OutParams("VolumeSize"))
objReader.WriteLine(" Volume size: " + OutParams("VolumeSize"))
Next
objReader.Close()
Catch err As ManagementException
MessageBox.Show("An error occurred while trying to execute the WMI method: " & err.Message)
End Try
我无法理解的是如何从“DefragAnalysis”方法中获取参数信息(即“VolumeSize”)。上面的代码返回“方法未找到错误”。
谢谢
-编辑 这是当前在 WMI Code Creator 中执行时的工作原理:
Imports System
Imports System.Management
Imports System.Windows.Forms
Namespace WMISample
Public Class MyWMIQuery
Public Overloads Shared Function Main() As Integer
Try
Dim colItemsVolInfo As New ManagementObjectSearcher("root\CIMV2", "Select * from Win32_Volume where DriveType = '3'")
For Each queryObj As ManagementObject In colItemsVolInfo.Get()
Dim OutParams As ManagementBaseObject = queryObj.InvokeMethod("DefragAnalysis", Nothing, Nothing)
Console.WriteLine(" Volume size: {0}MB", Math.Round(OutParams("DefragAnalysis")("VolumeSize")) * (9.53674316 * 10 ^ -7))
Console.WriteLine(" Cluster size: {0}MB", Math.Round(OutParams("DefragAnalysis")("ClusterSize")) * (9.53674316 * 10 ^ -7))
If OutParams("DefragRecommended") = True Then
Console.WriteLine("You should defragment this volume.")
Else
Console.WriteLine("You do not need to defragment this volume.")
End If
Next
Catch err As ManagementException
MessageBox.Show("An error occurred while trying to execute the WMI method: " & err.Message)
End Try
End Function
End Class
End Namespace
WMI 输出: 卷大小:40857.9960763451MB 集群大小:0.003906249998336MB 您无需对此卷进行碎片整理。
但是在 Visual Studio 中执行此操作会返回以下内容: 卷大小:MB 集群大小:MB 您无需对此卷进行碎片整理。
这里的重点是虽然它在 Windows Server 2008 R2 下不工作,但在 Windows Server 2003 下工作(在 Visual Studio 中执行时),WMI Code 将在任何平台上工作。
注意:我玩过“Console.WriteLine”并将其更改为“Debug.WriteLine”以将值输出到即时窗口。
【问题讨论】:
标签: vb.net methods parameters wmi