web-dev-qa-db-ja.com

Powershell-複数のパラメーターをInvoke-Commandに渡します

ネットバックアップの機能の一部をリモートで活用するために、ワンライナーを作成しようとしています。最後に-args [0]と[1]を使用し、パラメーターを繰り返して、パラメーターをInvokeCommandに渡す方法を知っています。私が達成しようとしていることの例:

CC =国コード(命名規則により繰り返されます

SS =サイト(命名規則により繰り返されます)

Invoke-Command -ComputerName RemoteServer -ScriptBlock {& "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpplinfo.exe" CC0SITE_VMW_BRON -set -L -M CC0SITEb0100d0a.s0SITE.CC.DOMAIN.COM} 

ユーザー入力を取得してパラメーターを宣言した後、invoke-commandに渡されないようです

Invoke-Command -ComputerName RemoteServer -ScriptBlock {& "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpplinfo.exe" $args[0]0$args[1]_VMW_BRON -L -M $args[0]0$args[1]b0100d0a.s0$args[1].$args[0].DOMAIN.com} -Args $CCode, $Site
5

スクリプトブロック内でparam($ val1、...)を使用して、引数を渡します。

Invoke-Command -ComputerName 'SERVERNAME' -ScriptBlock {
param($argument1, $argument2) #<--- this is required!
 write-Host $CCode
 write-Host $Site
} -ArgumentList ($argument1, $argument2)

詳細と構文は、 Invoke-Command コマンドレットのArgumentList(別名Args)セクションにあります。

6
Dieter Gobeyn

変数を展開する方法に問題がある可能性があるため、デバッグ中に引数が正しく渡されていないように見える場合があります。単にwriteを使用して出力をテストします。例えば:

Invoke-Command -ComputerName localhost -ScriptBlock {write "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpplinfo.exe CC0SITE_VMW_BRON -set -L -M CC0SITEb0100d0a.s0SITE.CC.DOMAIN.com"}
Invoke-Command -ComputerName localhost -ScriptBlock {write "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpplinfo.exe $($args[0])0$($args[1])_VMW_BRON -set -L -M $($args[0])0$($args[1])b0100d0a.s0$($args[1]).$($args[0]).DOMAIN.com"} -Args "CC", "SITE" 
0
jfrmilner