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 に答える