遠程服務器上,我需要能夠導入通過C#運行空間駐留在遠程機器上的模塊。導入一個PowerShell模塊中的C#運行空間
要清楚我的意思是:我創建的服務駐留在服務器A上。它使用以下方法爲服務器B創建遠程運行空間。通過運行空間我試圖導入一個模塊在服務器B.
這裏是我用來進行遠程調用的方法:
internal Collection<PSObject> RunRemoteScript(string remoteScript, string remoteServer, string scriptName, out bool scriptSuccessful)
{
bool isLocal = (remoteServer == "localhost" || remoteServer == "127.0.0.1" || remoteServer == Environment.MachineName);
WSManConnectionInfo connectionInfo = null;
if (!isLocal)
{
connectionInfo = new WSManConnectionInfo(new Uri("http://" + remoteServer + ":5985"));
}
PsHostImplementation myHost = new PsHostImplementation(scriptName);
using (Runspace remoteRunspace = (isLocal ? RunspaceFactory.CreateRunspace(myHost) : RunspaceFactory.CreateRunspace(myHost, connectionInfo)))
{
remoteRunspace.Open();
using (PowerShell powershell = PowerShell.Create())
{
powershell.Runspace = remoteRunspace;
Pipeline pipeline = remoteRunspace.CreatePipeline();
pipeline.Commands.AddScript(remoteScript);
Collection<PSObject> results = pipeline.Invoke();
remoteRunspace.Close();
scriptSuccessful = myHost.ScriptSuccessful;
return results;
}
}
}
「remoteScript」設置爲PowerShell腳本我想跑步。例如:
"Import-Module Modulename;CustomCommand-FromModule -parameter(s) -ErrorAction stop"
模塊未packedged一起它的一個PSD1,PSM1,並且位於C一堆腳本文件:所述遠程服務器(服務器B)上\\ Powershell的\模塊名和我已經測試並確保它正在調用C:\\ Powershell \ ModuleName目錄中的ModuleName.psd1文件。
裏面的ModuleName.psd1文件是行:
ModuleToProcess = 'ModuleName.psm1'
不過,我得到一個非常奇怪的錯誤,如果我試圖通過C#的運行空間來運行它。
如果我在下面發作爲參數傳遞給 「remoteScript」:
我收到以下錯誤:
System.Management.Automation.RemoteException: The module to process 'ModuleName.psm1', listed in field 'ModuleToProcess' of module manifest 'C:\Powershell\ModuleName\ModuleName.psd1' was not processed because no valid module was found in any module directory.
該模塊中的「$ ENV的一個存在: PSModulePath的位置,並確實顯示如果你運行:
get-module -listAvailable
我也試過把完全合格的p運行到psd1文件中的ModuleName.psm1文件。當我這樣做(或者什麼是由以下x0n建議)我得到幾乎相同的錯誤:
The module to process 'C:\Powershell\ModuleName\ModuleName.psm1', listed in field 'ModuleToProcess' of module manifest 'C:\Powershell\ModuleName\ModuleName.psd1' was not processed because no valid module was found in any module directory.
在這一點上,我真的不知道哪裏去了,或者即使這實際上是可能的。我到處找,發現了一些事情,似乎有關,但它從來不是完全一樣,並往往是我已經克服或只是還沒有(據我所知)碰到尚未問題。任何幫助,將不勝感激!謝謝!
嘗試在PSD1使用ModuleToProcess =聯接路徑$ psscriptroot 'modulename.psm1'。 – x0n 2012-03-23 14:09:52
感謝x0n,但我仍然遇到錯誤。我在原文中增加了一些細節。 – Arangarx 2012-03-27 15:43:09
你能通過命令行遠程導入模塊嗎? – 2012-04-19 03:32:34