我有一个试图在远程计算机上运行的 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 变量为空——未创建/建立会话——因此,该脚本不在远程计算机上运行。Powershell 不会返回错误或任何其他失败的指示......我只能看到$session -eq $null
.
我已验证 Web 应用程序正在使用的 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 无法创建远程会话的问题。