具有远程会话的调用命令:无法验证参数上的参数

时间:2019-05-01 17:07:01

标签: powershell remote-access

我编写了一个脚本来重新启动远程服务器上的一些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 个答案:

答案 0 :(得分:1)

远程会话无法访问您在本地定义的变量。可以使用$using:variable

引用它们
Invoke-Command -Session $psSession -ScriptBlock { $using:websiteNames | foreach{ Stop-Website -Name $_ } }
Invoke-Command -Session $psSession -ScriptBlock { $using:websiteNames | foreach{ Start-Website -Name $_ } }

答案 1 :(得分:0)

实际上只需要将参数传递到-ArgumentList的{​​{1}}并使用-ScriptBlock在功能块中对其进行引用:

$args