Invoke-Command с удаленным сеансом: невозможно проверить аргумент параметра - PullRequest
0 голосов
/ 01 мая 2019

Я написал скрипт для перезапуска нескольких сайтов ASP.NET на удаленном сервере:

$computerName = #...
$password = #...
$secureStringPassword = ConvertTo-SecureString -AsPlainText -Force -String $password
$userName = #...
$credential= New-Object System.Management.Automation.PSCredential ($userName, $secureStringPassword)
$websiteNames = #..., #..., #...

Get-PSSession -ComputerName $computerName -Credential $credential | Remove-PSSession 

$psSession = New-PSSession -ComputerName $computerName -Credential $credential

Invoke-Command -Session $psSession -ScriptBlock { $websiteNames | foreach{ Stop-Website -Name $_ } }
Invoke-Command -Session $psSession -ScriptBlock { $websiteNames | foreach{ Start-Website -Name $_ } }

$psSession | Remove-PSSession 

По некоторым причинам мои Invoke-Command не работают должным образом, у меня появляется следующее сообщение об ошибке:

Невозможно проверить аргумент в параметре «Имя». Аргумент нулевой. Укажите допустимое значение для аргумента и попробуйте снова выполнить команду.

Когда команды запускаются после Enter-PSSession, он отлично работает в -ScriptBlock, он как бы портит параметр -Name, есть идеи, как это исправить?

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Удаленный сеанс не может получить доступ к переменным, которые вы определили локально. На них можно ссылаться с помощью $using:variable

Invoke-Command -Session $psSession -ScriptBlock { $using:websiteNames | foreach{ Stop-Website -Name $_ } }
Invoke-Command -Session $psSession -ScriptBlock { $using:websiteNames | foreach{ Start-Website -Name $_ } }
0 голосов
/ 01 мая 2019

На самом деле просто необходимо передать аргументы в -ArgumentList из -ScriptBlock и использовать $args для ссылки на него в функциональном блоке:

Invoke-Command -Session $psSession -ScriptBlock { $args | foreach{ Stop-Website -Name $_ } } -ArgumentList $websiteNames
Invoke-Command -Session $psSession -ScriptBlock { $args | foreach{ Start-Website -Name $_ } } -ArgumentList $websiteNames
...