У нас есть сценарий 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 ... или ... кто знает.
Вы можете передать конфигурацию командлету Invoke-Command, чтобы он использовал Powershell 2.
Register-PSSessionConfiguration -Name PS2 -PSVersion 2.0
Invoke-Command -ConfigurationName PS2 -ComputerName $env:computername -ScriptBlock {$PSVersionTable.PSVersion}