Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
powershell启动服务失败_Powershell - Fatal编程技术网

powershell启动服务失败

powershell启动服务失败,powershell,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”上的参数

我有一个非常简单的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或空的参数,然后 请重试该命令。 +CategoryInfo:InvalidData:(:)[Start Service],ParameterBindingValidationException +FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.StartServiceCommand +PSComputerName:mdfiletest


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

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