VB.NET Справка по выводу параметров метода - PullRequest
0 голосов
/ 19 февраля 2011

Я пытаюсь распечатать (в текстовый файл) информацию о фрагментации, предоставляемую классом Win32_Volume, используя метод DefragAnalysis, и придумала следующий код 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

То, что я не могуразобраться в том, как получить информацию о параметре (например, "VolumeSize") из метода "DefragAnalysis".Приведенный выше код возвращает «Ошибка метода не найдена».

Спасибо

-Edit Это то, что в настоящее время работает при выполнении в 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 возвращает следующее: Размер тома: МБ Размер кластера: МБ Вам не нужно дефрагментировать этот том.

Точказдесь, хотя он НЕ работает под Windows Server 2008 R2, но работает под Windows Server 2003 (при выполнении в Visual Studio), код WMI будет работать независимо от платформы.

Примечание: я играл с "Console.WriteLine "и изменил его на" Debug.WriteLine ", чтобы вывести значение в непосредственное окно.

1 Ответ

0 голосов
/ 19 февраля 2011

Нет свойства как VolumeSize.

Когда вы вызываете DefragAnalysis () , он возвращает состояние функции и параметры аутов boolean DefragRecommended и object DefragAnalysis.

Класс дефрагментации содержит свойство VolumeSize.

Console.WriteLine("DefragRecommended: {0}", outParams("DefragRecommended"))
Console.WriteLine("VolumeSize: {0}", outParams("DefragAnalysis")("VolumeSize"))
Console.WriteLine("ReturnValue: {0}", outParams("ReturnValue"))

Вы должны всегда читать документацию , а не делать предположения.

Я хотел бы предложить хороший инструмент под названием WMI Code Creator v1.0 . Этот инструмент позволяет генерировать код VBScript, C # и VB .NET, который использует WMI для выполнения задачи управления, такой как запрос данных управления, выполнение метода из класса WMI или получение уведомлений о событиях с помощью WMI.

Надеюсь, это поможет. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...