2009-12-19 145 views

回答

5

伴隨基思的做法的線

using System; 
using System.Management.Automation; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var script = @" 
       Get-WmiObject -list -namespace root\cimv2 | Foreach {$_.Name} 
      "; 

      var powerShell = PowerShell.Create(); 
      powerShell.AddScript(script); 

      foreach (var className in powerShell.Invoke()) 
      { 
       Console.WriteLine(className); 
      } 
     } 
    } 
} 
7

我不知道你爲什麼提到PowerShell;你可以在純C#和WMI(即System.Management命名空間)中執行此操作。

要獲得所有WMI類的列表,使用SELECT * FROM Meta_Class查詢:

using System.Management; 
... 

try 
{ 
    EnumerationOptions options = new EnumerationOptions(); 
    options.ReturnImmediately = true; 
    options.Rewindable = false; 

    ManagementObjectSearcher searcher = 
     new ManagementObjectSearcher("root\\cimv2", "SELECT * FROM Meta_Class", options); 

    ManagementObjectCollection classes = searcher.Get(); 

    foreach (ManagementClass cls in classes) 
    { 
     Console.WriteLine(cls.ClassPath.ClassName); 
    } 
} 
catch (ManagementException exception) 
{ 
    Console.WriteLine(exception.Message); 
} 
3

就我個人而言,我會用海倫的方法,並取消對PowerShell的依賴。這就是說,這裏是你將如何在C#代碼此使用PowerShell來獲取所需的信息:

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Linq; 
using System.Management.Automation; 

namespace RunspaceInvokeExp 
{ 
    class Program 
    { 
     static void Main() 
     { 
      using (var invoker = new RunspaceInvoke()) 
      { 
       string command = @"Get-WmiObject -list -namespace root\cimv2" + 
            " | Foreach {$_.Name}"; 
       Collection<PSObject> results = invoker.Invoke(command); 
       var classNames = results.Select(ps => (string)ps.BaseObject); 
       foreach (var name in classNames) 
       { 
        Console.WriteLine(name); 
       } 
      } 
     } 
    } 
} 
4

只是要注意,可用的工具允許您創建,運行和保存用PowerShell編寫的WMI腳本,PowerShell Scriptomatic工具可從Microsoft TechNet網站下載。

使用此工具,您可以探索root \ CIMV2或任何其他WMI名稱空間內的所有WMI類。

|Image of PowerShell Scriptomatic tool

+0

這很好用。謝謝您的幫助。 – Sanch01R 2009-12-21 11:09:17