从ASP.NET应用程序调用New-PSSession失败(创建null对象)

时间:2011-10-03 19:54:12

标签: powershell powershell-remoting

我有一个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

我已经确认网络应用正在使用的apppool在我登录的同一帐户下运行,因此 应具有相同的权限。 以下是我在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();

我希望有人能看到我所缺少的东西;在使用PowerShell无法创建远程会话时,谷歌似乎没什么用。

1 个答案:

答案 0 :(得分:1)

据我所知,可能存在两个问题:

  1. Enter-PsSession用于交互式远程会话,您最好将其替换为New-PSSession
  2. 您可能会遇到凭证问题
  3. 无论Using PowerShell 2.0 from ASP.NET Part 1似乎是您想要做什么的好食谱。现有三个较旧的Part1Part2 Part3