リモート コンピューターで実行しようとしている PowerShell スクリプトがあります。次のように、リモート マシンへのセッションを作成し、リモート スクリプトを呼び出すローカル PS スクリプトがあります。
param($serverName, $rootPath, $appsToInstall)
$session = Enter-PsSession -ComputerName $serverName
$command = {
param($path,$apps)
$path\temp\IISsetup.ps1 $path $apps
}
$output = Invoke-Command -Session $session -scriptblock $command -ArgumentList
$rootPath,$appsToInstall
Remove-PSSession -Session $session
PS コンソールからローカル スクリプトを実行すると、期待どおりに動作し、リモート スクリプトが実行されます。ただし、ASP.NET アプリから実行しようとすると、$session 変数が null になり、セッションが作成/確立されないため、リモート コンピューターでスクリプトが実行されません。Powershell は、エラーや、失敗したことを示すその他の表示を返しません$session -eq $null
。
Web アプリが使用しているアプリプールが、ログオンに使用したのと同じアカウントで実行されていることを確認したので、同じアクセス許可を持つ必要があります。ASP.NET 内からローカル スクリプトを呼び出す方法を次に示します。
using (Runspace remoteRunspace = RunspaceFactory.CreateRunspace())
{
remoteRunspace.Open();
using (PowerShell ps = PowerShell.Create())
{
ps.Runspace = remoteRunspace;
var cmd = new Command(Path.Combine(ServerPath, "LocalIISSetupLauncher.ps1"));
cmd.Parameters.Add("serverName", this.Server.ServerName);
cmd.Parameters.Add("rootPath", LocalIisDirectory);
cmd.Parameters.Add("appsToInstall", Server.InstalledApplications.ToList().ToArray());
ps.Commands.AddCommand(cmd);
var results = ps.Invoke();
私が見逃しているものを誰かが見てくれることを願っています。Google は、リモート セッションの作成に失敗した PowerShell についてあまり詳しくないようです。