2015-11-12 43 views
0

我正在使用invokemethod調用powershell的c#服務(我使用此路由由於需求並且需要使用.net 2)。所以我的問題是,如果我在這個WMI調用中設置了值,我可以將它們拉回到原始線程中嗎?一個例子是像(僞):從WMI獲取powershell變量值調用方法

wmi.invokemethod(「powershell.exe -command &(調用命令{$ a =(GET-ACL)。路徑;返回$ PATH}));

在上面,我想抓住$ PATH變量,但沒有發現任何物品有辦法做到這一點的情況下。

提前感謝!

+0

這實際上工作嗎?調用任意命令作爲'InvokeMethod()'的唯一參數? –

+0

完整的語法是(進程類,以及powershell命令(inparams [「commandline」)被指定): ManagmentBaseObject outparams = processclass.InvokeMethod(「Create」,inparams,null)。 – Joeymick

回答

0

有很多關於從C#執行PS腳本並檢索的信息無論(管道)輸出PS腳本創建。這是一個描述流程的博客:http://blogs.msdn.com/b/kebab/archive/2014/04/28/executing-powershell-scripts-from-c.aspx。以下是實際記錄的API:https://msdn.microsoft.com/en-us/library/dd182449(v=vs.85).aspx。請注意,該頁面也有一個示例。

如果您打算執行用戶腳本並需要檢索它設置的變量(與您自己編寫的腳本相比),那麼您可以編寫一個包裝腳本,該腳本點出用戶腳本,然後用戶腳本完成你的包裝腳本輸出$ path(或其他任何你喜歡的變量)到管道,你的C#代碼將能夠檢索它。

順便說一句,我不認爲有任何簡單的方法來做它聽起來像你通過WMI調用描述。上述方法將在.Net 2.0上運行。

你可能認爲要做到的一件事是實現這一目標是由wmi.invoke創建的過程來改變它的父(你的C#服務)環境。但是,正如這裏所解釋的:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682009(v=vs.85).aspx這是不可能的(請參閱頁面底部的社區評論以獲取更多深度信息)。

+0

感謝您的信息!生病檢查你提到的文章。 – Joeymick