在C#中的Powershell命令#

问题描述:

我想查询根\ CIMV2命名空间内的所有WMI类的名称。有没有办法使用PowerShell命令在C#中检索这些信息?在C#中的Powershell命令#

伴随基思的做法的线

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); 
      } 
     } 
    } 
} 

我不知道你为什么提到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); 
} 

你可能会希望只使用System.Management命名空间像海伦回答,但你也可以在主机的PowerShell的应用。见http://www.codeproject.com/KB/cs/HowToRunPowerShell.aspx

就我个人而言,我会用海伦的方法,并取消对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); 
       } 
      } 
     } 
    } 
} 

只是要注意,可用的工具允许您创建,运行和保存用PowerShell编写的WMI脚本,PowerShell Scriptomatic工具可从Microsoft TechNet网站下载。

使用此工具,您可以探索root \ CIMV2或任何其他WMI名称空间内的所有WMI类。

|Image of PowerShell Scriptomatic tool

+0

这很好用。谢谢您的帮助。 – Sanch01R 2009-12-21 11:09:17