C# WinForm から呼び出せるようにしたいリモート処理を利用する一連の完全に機能する powershell スクリプトがあります。ここに私がこれまでに持っているコードがあります
private void button1_Click(object sender, EventArgs e)
{
_runspace = RunspaceFactory.CreateRunspace();
_runspace.Open();
_ps = PowerShell.Create();
_ps.Runspace = _runspace;
var output = new PSDataCollection<PSObject>();
output.DataAdded += DataAdded;
_ps.AddScript(@"C:\projects\Acme\trunk\PowerShell\deploy-qa-p5.ps1");
_invokeResult = _ps.BeginInvoke<PSObject, PSObject>(null, output);
}
このコードを実行すると、リモート セッションに対して実行することを意図したスクリプト内のすべての powershell コマンドが、実際にはローカル PC で実行されていることがわかります。
たとえば、このコードを Powershell.exe から直接実行すると、リモート サーバーからアプリケーションがアンインストールされます。上記の C# コードから実行すると、この同じコードがローカル マシン上のアプリケーションをアンインストールします。
Invoke-Command -Session $remoteSession -scriptblock $uninstallScript -ArgumentList $applicationGuid
ここでも、C# コードで参照されているまったく同じ PS スクリプトを powershell.exe から直接実行すると、リモート サーバーに対して期待どおりに動作します。
グーグルで、C# からリモート実行空間を作成する方法を見つけました。ただし、その場合、PS スクリプトを大幅にリファクタリングして、C# に移動するリモート コードを引き出す必要があります。PS スクリプトをスタンドアロン モードで (つまり、powershell.exe から直接) 実行できるようにする必要があるため、これは実行可能なソリューションではありません。
PSスクリプトを再調整する必要のないこの問題の解決策を誰か提案できますか?