我们有一个 PowerShell 脚本,可以通过以下命令关闭远程应用程序池:
$appPoolName = "myAppPool"
$server = "myserver.domain.com"
$stopAppPoolScript = {param($appPoolname); Import-Module WebAdministration; Stop-WebAppPool -Name $appPoolName;}
#remotely execute script to stop the app pool
Invoke-Command -ComputerName $server -scriptBlock $stopAppPoolScript -ArgumentList $appPoolname
#sleep for 10 seconds
Start-Sleep -s 10
#print out the status of the app pool
Invoke-Command -ComputerName $server -scriptBlock $checkAppPoolStatusScript -ArgumentList $appPoolname
#always says "Started"
当发出命令的构建服务器使用 PowerShell 4 并且远程服务器使用 PowerShell 版本 2 时,此脚本可以工作很长时间。但是,这个周末我将构建服务器升级到 Windows Management Framework 5(和 Powershell 5),并且 Stop-WebAppPool 命令在通过我们的构建服务器通过 Invoke-Command 远程运行时停止工作。我确认从我的本地计算机(也是使用 PowerShell 5)我也无法发出此命令。但是,从任何使用 Powershell 4 的计算机我都可以向远程服务器发出此命令并且它可以正常工作。
我尝试过的其他可能相关的事情:* 如果我建立远程 PowerShell 会话并以交互方式发出命令,它会正常工作。* 我可以运行命令来检查应用程序池状态,它工作正常:Invoke-Command -ComputerName $server -scriptBlock $checkAppPoolStatusScript -ArgumentList $appPoolname
* 建立会话然后调用Invoke-Command -Session $mySession...
也没有帮助。它仍然不会停止应用程序池。
任何帮助都将不胜感激。我想知道 Powershell 5 向 PowerShell 2 发出远程命令是否存在问题……或者在安装 Windows Management Framework 5 时与安全性相关的某些内容发生了变化……或者……谁知道呢。
答案1
您可以将配置传递给 Invoke-Command cmdlet 以让其使用 Powershell 2。
Register-PSSessionConfiguration -Name PS2 -PSVersion 2.0 Invoke-Command -ConfigurationName PS2 -ComputerName $env:computername -ScriptBlock {$PSVersionTable.PSVersion}