0

リモート コンピューターで実行しようとしている 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 についてあまり詳しくないようです。

4

1 に答える 1

1

私が理解している限り、2つの問題がある可能性があります:

  1. Enter-PsSessionはインタラクティブなリモート セッションに使用されますNew-PSSession
  2. 資格情報の問題が発生する可能性があります

ASP.NET Part 1 から PowerShell 2.0 を使用するもの 何でも、あなたがやりたいことの良いクックブックのようです。

于 2011-10-04T03:49:36.063 に答える