【问题标题】:powershell Start-Service failspowershell 启动服务失败
【发布时间】:2013-01-12 12:48:24
【问题描述】:

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

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

【问题讨论】:

    标签: powershell


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-08
      • 2020-05-23
      • 2016-12-30
      • 2021-11-30
      • 2016-07-04
      • 2013-08-11
      • 2017-01-11
      相关资源
      最近更新 更多