Вызов New-PSSession из приложения ASP.NET завершается неудачно (создает нулевой объект) - PullRequest
0 голосов
/ 03 октября 2011

У меня есть скрипт 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.

Я убедился, что пул приложений, который использует веб-приложение, работает под той же учетной записью, с которой я вхожу, поэтому должен иметь те же разрешения. Вот как я вызываю локальный скрипт из 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();

Я надеюсь, что кто-нибудь увидит, чего мне не хватает; Похоже, что Googles не слишком сильно влияет на PowerShell, который не может создать удаленный сеанс.

1 Ответ

1 голос
/ 04 октября 2011

Насколько я понимаю, могут быть две проблемы:

  1. Enter-PsSession используется для интерактивного удаленного сеанса, вам лучше заменить его на New-PSSession.

Независимо от того, Использование PowerShell 2.0 из ASP.NET, часть 1 , кажется, хорошая поваренная книга для того, что вы хотите сделать. Существует три старых Part1 , Part2 Part3 .

...