Powershell 5 升级后,远程调用命令 Powershell Stop-WebAppPool 不再起作用

Powershell 5 升级后,远程调用命令 Powershell Stop-WebAppPool 不再起作用

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

例如

相关内容