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"
モジュールは一緒にパックされていません。psd1、psm1、およびリモートサーバー(サーバーB)のC:\\ PowerShell \ ModuleNameにある一連のスクリプトファイルであり、ModuleNameを呼び出していることをテストして確認しました。 C:\\ PowerShell\ModuleNameディレクトリにあるpsd1ファイル。
ModuleName.psd1ファイル内には、次の行があります。
ModuleToProcess = 'ModuleName.psm1'
ただし、C#の実行スペースで実行しようとすると、非常に奇妙なエラーが発生します。
「remoteScript」へのパラメータとして以下を送信すると、次のようになります。
"Import-Module Modulename"
次のエラーが発生します。
System.Management.Automation.RemoteException:モジュールマニフェスト「C:\ PowerShell \ ModuleName \ ModuleName.psd1」のフィールド「ModuleToProcess」にリストされている「ModuleName.psm1」を処理するモジュールは、有効なモジュールが見つからなかったため、処理されませんでしたモジュールディレクトリ。
モジュールは「$env:PSModulePathの場所の1つに存在し、次を実行すると表示されます。
get-module -listAvailable
また、psd1ファイル内にModuleName.psm1ファイルへの完全修飾パスを挿入してみました。私がそれを行うと(または以下のx0nによって提案されたもの)、ほぼまったく同じエラーが発生します:
モジュールマニフェスト「C:\ PowerShell \ ModuleName \ ModuleName.psd1」のフィールド「ModuleToProcess」にリストされている「C:\ PowerShell \ ModuleName \ ModuleName.psm1」を処理するモジュールは、どのモジュールにも有効なモジュールが見つからなかったため、処理されませんでしたディレクトリ。
この時点で、どこに行けばいいのか、あるいはこれが実際に可能であるとしても、私にはよくわかりません。私はいたるところを検索して、関連しているように見えるものをいくつか見つけましたが、まったく同じではなく、すでに克服した、または(私の知る限り)まだ直面していない問題になる傾向がありました。どんな助けでもいただければ幸いです!ありがとう!