很久沒有寫程序了, 再次上手也處於功能強大的Windows PowerShell的緣故. 很少話, 先上段代碼引入正題....shell
1 static Collection<PSObject> RunPowershell(string filePath, string parameters) 2 { 3 RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); 4 Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); 5 runspace.Open(); 6 RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); 7 Pipeline pipeline = runspace.CreatePipeline(); 8 Command scriptCommand = new Command(filePath); 9 Collection<CommandParameter> commandParameters = new Collection<CommandParameter>(); 10 foreach (var parameter in parameters.Split(' ')) 11 { 12 CommandParameter commandParm = new CommandParameter(null, parameter); 13 commandParameters.Add(commandParm); 14 scriptCommand.Parameters.Add(commandParm); 15 } 16 pipeline.Commands.Add(scriptCommand); 17 Collection<PSObject> psObjects; 18 psObjects = pipeline.Invoke(); 19 if (pipeline.Error.Count > 0) 20 { 21 throw new Exception("Something is wrong in PowerShell script."); 22 } 23 24 runspace.Close(); 25 26 return psObjects; 27 }
編譯開始後,反饋問題是缺乏 windows
using System.Management.Automation;
using System.Management.Automation.Runspaces;服務器
的引用。 baidu查看不少都是提到要安裝SDK之類的。考慮當前用的編輯器就是Visual Studio 2013 Premium,思考應該已經包含這個DLL了吧。編輯器
其實它就在系統目錄下的,參考C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35目錄下,這個是windows 7 Pro 64bit的存放位置。測試
編譯經過後測試運行,而拋出一個程序異常錯誤信息,錯誤停留在上述第18行代碼處。通過一番檢查後發現問題是,本機PowerShell的ExecutionPolicy是Restricted,這個能夠經過以下命令檢查:spa
.\Get-ExecutionPolicycode
這個狀況在Windows 2008服務器也遇到並修改過。修改的方式是執行命令:blog
.\Set-ExecutionPolicy RemoteSignedip
但此次無效,緣由是註冊表不被受權已PowerShell命令方式更改。 沒轍只能手工進入註冊表修改了 Computer\HKEY_LOCAL_MACHINE\SOFAWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell\下ExecutionPolicy項的鍵值爲"RemoteSigned" (注:這鍵值項多是不存在的,你能夠建立它)。rem
完成這些後,就能夠Run這段程序了。