1

我有一个非常简单的 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

对我来说,它们是一样的。为什么这不起作用?谢谢

4

1 回答 1

3

它不起作用,因为在远程服务器上执行脚本块时,该变量$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伪作用域,它将捕获局部变量并尝试将其序列化并远程发送。字符串始终是可序列化的(可远程的。)

于 2013-01-29T02:56:24.227 回答