我有一个非常简单的powershell脚本,可以远程启动服务。
Invoke-Command -Session $session -ScriptBlock { Start-Service "My test service v1" }
工作正常,但
$myval="My test service v1"
Invoke-Command -Session $session -ScriptBlock { Start-Service $myval }
失败
对我来说,他们是一样的。为什么这不起作用?感谢无法验证参数'InputObject'的参数。争论是 null或空。提供一个非null或空的参数然后 再次尝试该命令。 + CategoryInfo:InvalidData :( :) [Start-Service],ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.StartServiceCommand + PSComputerName:mdfiletest
答案 0 :(得分:3)
它不起作用,因为当在远程服务器上执行scriptblock时,变量$myval
在会话状态中不存在;它只存在于本地(客户端)端。与PowerShell v2 / v3兼容的方法是:
invoke-command -session $session -scriptblock {
param($val); start-service $val } -args $myval
另一种PowerShell v3(仅)方式是这样的:
invoke-command -session $session -scriptblock { start-service $using:myval }
$using
前缀是一个特殊的伪范围,它将捕获局部变量并尝试序列化并远程发送。字符串总是可序列化的(远程可用。)