2011-12-17 144 views
7

Powershellを使用して、リモートマシン上のバッチファイルを呼び出す必要があります。このバッチファイルには引数があります。ここで私はこれまでにしているものです:PowershellのInvoke-Commandを使用して引数付きバッチファイルを呼び出す

$script = "\\fileshare\script.cmd" 
$server = $args[0] 
$args [string]::join(',',$args[1 .. ($args.count-1)]) 

Invoke-Command -computername $server {$script + ' ' + $args} 

検索のビットの後、私は、Invoke-Commandコマンド機能はまったく新しいプロセスでそのスクリプトブロックを実行することがわかったので、あなたはそれに変数を置くことができない(彼らが」勝ちましたtは伸びる)。これが、-ArgumentListタグの目的です。だから、私は、バッチスクリプトは、それが任意の引数が渡されていないと言われます...どちらか動作していないことを...代わりに

Invoke-Command -computername $server {\\fileshare\script.cmd} -ArgumentList "FirstArgument" 

これを試してみました。私は明示的にそういうものは見つけられませんが、-ArgumentListパラメータはPowershellスクリプトでしか動作しません(バッチスクリプトには供給されません)。

私はInvoke-Commandを使用して引数付きバッチファイルを呼び出す方法はありますか?

答えて

6

ですscriptblock、PARAMディレクティブを使って "受け取る"ようにしてください。このように:コードのこの小さなスニペットは、Perlの「シフト」機能を複製することを意図している

Invoke-Command -computername $server {\\fileshare\script.cmd $args} -ArgumentList "FirstArgument" 
+0

ありがとう!それはInvoke-Commandのテクニカルドキュメントに書いてあることですが、私はちょっと恥ずかしく、私はそれを私自身は理解できませんでした!しかし、$ argsについてのちょっとしたことは役に立ちます。 –

3

引数はscriptblockに引数として渡され、cmdには直接渡されません。あなたはしなければならない。

Invoke-Command {param($script,$arg1) &$script $arg1 } -computername $server -ArgumentList $script,"FirstArgument" 

または

Invoke-Command {&$args[0] $args[1] } -computername $server -ArgumentList $script,"FirstArgument" 

PS:私はあなたが$args [string]::join(',',$args[1 .. ($args.count-1)])でやっているのかわからないあなたに引数リストを渡すと、それは構文エラー

+0

Invoke-Command -computername $server {PARAM($myArg) \\fileshare\script.cmd $myArg} -ArgumentList "FirstArgument" 

またはあなただけの自動変数$ argsを使用することができます。それは私にとってコンパイラエラーを引き起こすようには見えず、意図したとおりに動作します。 $ server = $ args [0] $ args [string] :: join( '、'、$ args [1 ..($ args.count-1)]) –

+0

「=」が削除されました何とか私がそれを質問に貼り付けたときの2行目。 –

+0

名前付きパラメータは使用できますか?それについてのサンプル? – Kiquenet

関連する問題