SSH 経由で PSExec コマンドをプッシュすることにより、Linux マシンから Windows マシンにプログラムをリモートで実行するための PowerShell の行を記述しようとしています。セッション ID を手動で照会してハードコードすると機能しますが、ID が変更されるため、動的にプルする必要があります。
現在のコマンドは次のとおりです。
ssh [email protected] "psexec '\\\\192.168.1.3' -i Invoke-Command -ScriptBlock {query session | grep user | grep -o [0-9]} -s $prgm"
残念ながら、スクリプトを実行すると、次のエラーが表示されます。
The system cannot find the file specified.
Starting Invoke-Command on 192.168.1.3....1.3...
PsExec could not start Invoke-Command on 192.168.1.3:
Binary file C:\Users\user\Desktop\Games\StepMania\Program\StepMania.exe matches
ファイルパスは、スクリプトの前のほうのコードによるものです。スクリプト引数を、テキスト ファイルから取得した Windows マシン上のパスと一致させようとします。必要と思われる場合は、スクリプト全体を貼り付けることができます。
答え1
PSExec を使用してこれを試したことはありません。ただし、開始されたプロセスの現在の PID を取得するのは、次のようにするだけで簡単です...
$process = Start-Process -FilePath "notepad" -PassThru
"Process Id is $($process.Id)"
また、PowerShell には現在のプロセス ID を保持するデフォルトの変数があることに注意してください。
$pid
ただし、この方法では psexec 経由で支払いを受けることができ、Linux ターゲットと思われるものに SSH 経由で支払いを受けることはできないという回答があります。これは、Linux ボックスと思われるものに SSH セッションで接続するのではなく、Windows マシン間で通信していることに注意してください。
& psexec -s -d -i $SessionID \\$PCname $Program $FilePath\$FileName |
Select-String 'process ID (\d+)' |
ForEach-Object {$_.Matches.Groups[1].Value}
答え2
ssh [email protected] "psexec '\\\\192.168.1.3' powershell.exe -Command \"&{query session | grep user | grep -o [0-9]}\" -s $prgm"
SSH で -s 'lowercase' パラメータを何に使用しているのかよくわかりません... そのパラメータでは値が受け入れられないためです... -S 'uppercase' を意味していましたか?
その場合
ssh -S $prgm [email protected] "psexec '\\\\192.168.1.3' powershell.exe -Command \"&{query session | grep user | grep -o [0-9]}\""
PsExec の -s スイッチを意味していた場合、これもパラメーターに渡される値をサポートしていません...