2017-08-04 89 views
1

PowerShell的C#运行命令我有下面的代码:没有工作

private void ExecutePowerShellCommand(string command) 
     { 
      try 
      {    
       Runspace rs = RunspaceFactory.CreateRunspace(); 
       rs.Open(); 
       using (PowerShell ps = PowerShell.Create()) 
       { 
        ps.Runspace = rs; 
        ps.AddCommand(command); 
        var psOutput = ps.Invoke(); 
        LogPSHeader(); 
        foreach (var item in psOutput) 
        { 
         if (item == null) continue; 
         LogPS(item.BaseObject.ToString()); 
        } 
        if (ps.Streams.Error.Count > 0) LogPS("ERROR"); 
        LogPSEnding(); 
       } 
       //rs.Close(); 
      } 
      catch (Exception ex) 
      { 
       Log(ex.ToString()); 
      } 
     } 

接下来是如何我试图调用此方法:

ExecutePowerShellCommand("Get-NetAdapter"); 

,这样的代码不工作,我的问题不知道为什么。我想要在控制台中具有相同的输出,但在我的应用程序中。每当我runnig代码我得到不同的例外调试附加模式,如: - 操作取消异常 - 找不到'Event.Format.ps1xml'文件。当我把这个文件放到他搜索的文件夹时,我得到了下一个文件的请求等。 - 接下来,他找不到文件夹中的某个文件(我不记得文件的确切名称) 'C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \模块\ APPX'。 如果我想不是来自VS运行C#程序,但运行编译的exe我得到一个输出:

MSFT_NetAdapter(CreationClassName = “MSFT_NetAdapter” 的DeviceID = “{4C67B2DB-572B-4CB8- 9D0F-19AC7FE93B1B} “SystemCreationClassName = ”CIM_NetworkPort“ 的SystemName = ”w-KerbiczkovYuI.e-lab.icl.kazan.ru“)

MSFT_NetAdapter(CreationClassName = ”MSFT_NetAdapter“ 的DeviceID = ”{CBBC4607- 17BB-4FFB-A93F-A08F17472C8A}“,SystemCreationClassName = ”CIM_NetworkPort“,SystemName =”w-KerbiczkovYuI.e-lab.icl.kazan.ru“)

MSFT_NetAdapter(CreationClassName = “MSFT_NetAdapter” 的DeviceID = “{31950F9C-DF49-49A7-8BF9-CBD36F99D7CB}”,SystemCreationClassName = “CIM_NetworkPort” 的SystemName =“W-KerbiczkovYuI.e-lab.icl.kazan。る “)

MSFT_NetAdapter(CreationClassName = ”MSFT_NetAdapter“ 的DeviceID = ”{B03679B3-199A-43D8-9088-E919658424B1}“,SystemCreationClassName = ”CIM_NetworkPort“ 的SystemName =” W-KerbiczkovYuI.e-实验室。 icl.kazan.ru“)

我认为这个输出中的每个记录都是为接口(我有4 int erfaces)。

如果我在PowerShell控制台工作 - 没什么不好,一切都按预期工作。 如果我试图执行,例如:ExecutePowerShellCommand("Get-Process"); - 没有例外,我得到的结果。与PS控制台不一样,但VS中无一例外。

我做错了什么,我怎么能得到预期的结果,并具有相同的输出,在我的应用程序中的PowerShell控制台?

回答

0

对不起,这个愚蠢的问题。我找到了答案。我想结束这个问题,但我不能也不会在这里回答。 要在PS控制台中获得良好的输出,我需要在语句末尾添加命令:ps.AddCommand("Out-String")。请记住,您需要将输出重定向到Out-String命令。这两个命令之间不要使用AddStatement。 我的问题的第二部分是奇怪的例外。我仍然不完全理解它们的本质,但据我了解,它们是内部PowerShell异常,并且受PowerShell类捕捉,因为我没有捕获任何此异常。调试器只是告诉我他们。