8

リモート マシンでバッチ ファイルを呼び出すために、Powershell を使用したいと考えています。このバッチ ファイルには引数があります。これが私がこれまでに持っているものです:

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

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

少し調べてみたところ、Invoke-Command 関数はそのスクリプト ブロックをまったく新しいプロセスで実行するため、その中に変数を入れることはできません (それらは展開されません)。それが -ArgumentList タグの目的です。だから私は代わりにこれを試しました...

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

それもうまくいきませんでした...私のバッチスクリプトは、引数が渡されていないことを教えてくれます。明示的にそう言っているものは見つかりませんが、-ArgumentList パラメーターは Powershell スクリプトでのみ機能するようです (バッチ スクリプトにはフィードしません)。

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

4

2 に答える 2

7

引数リストをスクリプトブロックに渡すときは、PARAM ディレクティブを使用して「それらを受け取る」ようにしてください。このような:

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

または、$args 自動変数を使用することもできます。

Invoke-Command -computername $server {\\fileshare\script.cmd $args} -ArgumentList "FirstArgument"
于 2011-12-17T01:51:09.997 に答える
3

引数は、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)])構文エラーです。

于 2011-12-17T01:50:52.113 に答える