2012-03-02 6 views
15

私はすべてを検索し、さまざまなコマンドのバリエーションを試しましたが、まだまだありません。Powershellリモートコンピュータ上でコマンドライン引数を使用してリモートEXEを実行

私の目標は、すでにリモートマシン上に存在するexeを実行し、コマンドライン引数を渡すことです。私はinvoke-commandを試しましたが、私の構文で引数を認識できないようです。

方法が試み:

  1. Win32_Process.Create()
  2. Invoke-Commandコマンド
  3. スタート-プロセス
  4. [diagnostics.process] ::開始
  5. 起動-WmiMethod

私のテストから、私が得ることができる最も近いものは次のコマンドである:

$command = "program.exe -r param" 
Invoke-Command -ComputerName $server -ScriptBlock {$command} 

コマンドはエラーまたはリターンコードなしで完了しますが、リモートマシンでは引数なしで実行されませんでした。私は一重引用符で二重引用符を使って遊んだことがあります。

答えて

19

あなたが-ArgumentListパラメータを使用してみてくださいでした

invoke-command -ComputerName studio -ScriptBlock { param ($myarg) ping.exe $myarg } -ArgumentList localhost 

http://technet.microsoft.com/en-us/library/dd347578.aspx

パスではなく、その中にスペースがあり、プログラムを起動する例は、フォルダのパスです:

invoke-command -ComputerName Computer1 -ScriptBlock { param ($myarg) & 'C:\Program Files\program.exe' -something $myarg } -ArgumentList "myArgValue" 

引数の値が静的な場合は、次のようにスクリプトブロックに指定することができます。

invoke-command -ComputerName Computer1 -ScriptBlock { & 'C:\Program Files\program.exe' -something "myArgValue" } 
+0

ありがとう、すばやい応答。何らかの理由で、私がそれを試してみると、手動で実行した場合に動作する拡張コマンドを出力するようになりますが、実際には実行されていません。私はそれが将来の使用のために予約された文字だと言ったように、 "&"を取り除かなければならなかった。 – gregs

+0

@gregsテストするために私のマシンでリモーティングを有効にしなければなりませんでした。私はlocalhostの引数を送信する単純なpingテストにコマンドを変更しました。上記の私のために成功する。 –

+0

私は解決策ではなく、解決策を見つけたかもしれません。この行は、ping.exeと "localhost"を引数として使用すると動作しますが、パスにスペースがあるため、実行可能パスの前後に引用符を付ける必要があります。私がそれをするとき、それは単に引用符で私の文字列を私に戻ってエコーするが、私はそれが動作するとは思わない。 – gregs

-2
$sb = ScriptBlock::Create("$command") 
Invoke-Command -ScriptBlock $sb 

これは仕事や初心者の誤解を避ける必要があります。

3

起動時にプログラムにコマンドライン引数を渡そうとしていますか? 私は今、まさにこれを行う何かに取り組んでいます、そして、私は思ったよりもはるかに簡単でした。 私は、コマンドラインに入り、その後、私のアプリケーションの起動を

C:\folder\app.exe/xC:\folder\file.txt 

を入力し、指定した名前で指定したディレクトリにファイルを作成する場合。

私は(私はこれは、セッション内でさらにたくさんのようなコマンドを持っているリモートマシン上でPowerShellスクリプトを介してこれをやってみたかった、と私が行うために必要なすべてが

$s = New-PSSession -computername NAME -credential LOGIN 
    Invoke-Command -session $s -scriptblock {C:\folder\app.exe /xC:\folder\file.txt} 
Remove-PSSession $s 

を入れたことを考え出しました 実行可能ファイルとコマンドライン引数の間のスペースに注意してください。 それは私にとってはうまくいくが、アプリケーションの仕組みや、引数を渡す方法さえわからない。

*私はまた、あなたのファイルのパスにスペースが含まれている場合は、引用符を必要とする

C:\folder\app.exe /x"\\LocalPC\DATA (C)\localfolder\localfile.txt" 

にスクリプトブロックを変更することにより、自分のアプリケーションが戻って自分のローカルコンピュータにファイルをプッシュすることができます。

EDIT:実際には、これはアプリケーションをサービスなどとして起動するPowershellに愚かな問題をもたらしたので、私は検索をいくつか行い、リモートコンピュータ上でCMDを呼び出してコマンドを実行できることを理解しました。 このようにして、リモートマシンのCMDウィンドウにコマンドを入力したかのようにコマンドが正確に実行されます。スクリプトブロック内のコマンドを二重引用符で囲み、その前にcmd.exe/Cを置きます。このように:

cmd.exe /C "C:\folder\app.exe/xC:\folder\file.txt" 

これは私が最近しているすべての問題を解決しました。

編集編集: もっと問題が発生している可能性があります。

start-process -filepath C:\folder\app.exe -argumentlist "/xC:\folder\file.txt" 

これは、リモートプロセスが終了するのを待っている端末ウィンドウをハングアップしません。 プロセスを終了させる方法がないか確認してください。 (私は、別の引数のコーディングを必要としませんでした)

+0

ベストアンサーを受けました –

-1
$sb = [scriptblock]::create($command) 
+2

ようこそStackOverflow!おそらくあなたは何か説明を追加することができます、それは質問に尋ねた人のために役立つかもしれません。 –

関連する問題