リモートマシン上にあるPS1スクリプトを、C#ランスペースを介して別のリモートマシンに対して実行できるようにする必要があります。
これが何を意味するのかを明確にするために:私が作成しているサービスはサーバーAにあります。それは以下の方法を使用してサーバーBへのリモートランスペースを作成します。ランスペースを介して、サーバーCにあるスクリプトをサーバーBに対して呼び出そうとしています。それが役立つ場合は、現在サーバーAはサーバーCですが、常にそうであるとは限りません。
リモート呼び出しを行うために使用しているメソッドは次のとおりです。
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スクリプトに設定されています。例えば:
"& \"\\\\remoteserveraddress\\PathToScript\\Install.ps1\" -Parameter;Import-Module Modulename;CustomCommand-FromModule -parameter(s) -ErrorAction stop"
スクリプトを実行するリモートマシンを使用している場合は、PowerShellコンソールで次のコマンドを実行できます。
& "\\remoteserverC\PathToScript\Install.ps1" -Parameter
ただし、c#ランスペースを介して実行しようとすると、これは単に機能しません。
「remoteScript」へのパラメータとして以下を送信すると、次のようになります。
"& \"\\\\remoteserverC\\PathToScript\\Install.ps1\" -Parameter"
次のエラーが発生します。
'\ remoteserverC \ PathToScript \ Install.ps1'という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認して、再試行してください。
'&'を使用した場合と使用しない場合、およびパラメーターを使用した場合と使用しない場合を試しました。「\\remoteserver\ ... \ Install.ps1」ではなく、リモートマシン「c:\ ... \ Install.ps1」に直接存在するスクリプトをすでに呼び出すことができますが、できることは非常に有益です。リモートスクリプトを直接呼び出す。
私はグーグルとここスタックオーバーフローで多くのページを検索しましたが、この問題を克服するのに役立つものを見つけることができませんでした。どんな助けでもいただければ幸いです!ありがとう!