powershell启动服务失败

时间:2013-01-29 02:16:22

标签: powershell

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

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

1 个答案:

答案 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前缀是一个特殊的伪范围,它将捕获局部变量并尝试序列化并远程发送。字符串总是可序列化的(远程可用。)