2017-08-04 90 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類捕捉,因爲我沒有捕獲任何此異常。調試器只是告訴我他們。