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控制檯?