リモートマシン上のPS1スクリプトを別のリモートマシンとC#ランスペースを介して実行する必要があります。C#ランスペース内の別のリモートサーバー上でリモートパワーシェルスクリプトを実行
私が作成しているサービスは、サーバーAにあります。以下の方法でサーバーBにリモートランスペースを作成します。私はrunspaceを介してサーバーBのサーバーCに存在するスクリプトを呼び出そうとしています。役立つならば、現在のサーバー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#runspaceでそれを実行しようとすると私のために働きます。
私が「remoteScript」パラメータとして以下に送信する場合:
"& \"\\\\remoteserverC\\PathToScript\\Install.ps1\" -Parameter"
私は次のエラーを取得する:
The term '\remoteserverC\PathToScript\Install.ps1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
私はと「&」なしとして試してみましたパラメータなし。私はすでに "\\ remoteserver \ ... \ Install.ps1"の代わりにリモートマシン "c:\ ... \ Install.ps1"に直接存在するスクリプトを呼び出すことができますが、リモートスクリプトを直接呼び出す。
私はgoogleの多くのページとここでstackoverflowを検索しましたが、私はこの問題を克服するのに役立つものは何も見つかりませんでした。どんな助けもありがとう!ありがとう!
Install.ps1の内容は何ですか? – Kiquenet
@Kiquenet基本的に環境を設定し、他のスクリプトが使用できるようにモジュールをロードします。 以下の私の解決策と同じドライブマッピングチェックを行い、ステージング環境からファイルをサーバーにコピーし、アンインストール(存在する場合)してモジュールを再インストールします。次に、モジュールをインポートします。 – Arangarx