PsExecからのVBoxManageコントロール
PsExecを使用してリモートのVirtualBoxをコントロールしたい場合、結果が得られるコマンドと得られないコマンドがある。
例えば、list vmsコマンドは登録されている仮想マシンを取得できるが、list runningvmsコマンドは、起動中の仮想マシンを取得することができない。
試行錯誤した結果、以下の方法で取得ができた。
a.リモートで実行したいコマンドと、そのコマンドを実行した結果をテキストにリダイレクトするbatファイルを作成する
b.batファイルをタスクスケジュールとして登録し、即時実行を行う
c.リダイレクトされた結果をtypeコマンドにより読み取る
Local 192.168.1.101
Remote 192.168.1.102
NG
>PsExec ¥¥192.168.1.102 -u User -p pass "C:¥~¥VBoxManage.exe" list runningvms
OK
>PsExec ¥¥192.168.1.102 -u User -p pass cmd /c "echo "C:¥~¥VBoxManage.exe" list runningvms ^> %TMP%\foo.txt > %TMP%\foo.bat"
>PsExec \\192.168.1.102 -u User -p pass cmd /c "schtasks /Create /TN footask /TR %TMP%\foo.bat /SC MONTHLY"
>PsExec \\192.168.1.102 -u User -p pass cmd /c "schtasks /Run /TN footask"
>PsExec \\192.168.1.102 -u User -p pass cmd /c "schtasks /Delete /TN footask /F"
>PsExec \\192.168.1.102 -u User -p pass cmd /c "type %TMP%\foo.txt"
C# EX.
string cmd = "¥¥\\192.168.1.102 -u User -p pass cmd /c \"echo \"C:¥\~¥\VBoxManage.exe\" list runningvms ^> \x25TMP\x25\foo.txt > \x25TMP\x25\\foo.bat\"";
追記
schtasksを使用してうまく動くコマンドと動かないコマンドがあるため、各コマンドの実行はテストして確かめること
例えば、A→Bにテレポートしたい場合
Bを待機、Aをテレポートさせるコマンドはそれぞれschtasksの方法で動くが、Bをスタートさせるstartvmコマンドは、待機するため制御が戻らずその後のコマンドが失敗する。
startvmコマンドを実行する時は、
>PsExec \\192.168.1.102 -u User -p pass -i -d "C:\~\VBoxManage.exe" startvm vmName
として、-i -dオプションを併用し、かつschtasksの方法は利用しないこと
例えば、list vmsコマンドは登録されている仮想マシンを取得できるが、list runningvmsコマンドは、起動中の仮想マシンを取得することができない。
試行錯誤した結果、以下の方法で取得ができた。
a.リモートで実行したいコマンドと、そのコマンドを実行した結果をテキストにリダイレクトするbatファイルを作成する
b.batファイルをタスクスケジュールとして登録し、即時実行を行う
c.リダイレクトされた結果をtypeコマンドにより読み取る
Local 192.168.1.101
Remote 192.168.1.102
NG
>PsExec ¥¥192.168.1.102 -u User -p pass "C:¥~¥VBoxManage.exe" list runningvms
OK
>PsExec ¥¥192.168.1.102 -u User -p pass cmd /c "echo "C:¥~¥VBoxManage.exe" list runningvms ^> %TMP%\foo.txt > %TMP%\foo.bat"
>PsExec \\192.168.1.102 -u User -p pass cmd /c "schtasks /Create /TN footask /TR %TMP%\foo.bat /SC MONTHLY"
>PsExec \\192.168.1.102 -u User -p pass cmd /c "schtasks /Run /TN footask"
>PsExec \\192.168.1.102 -u User -p pass cmd /c "schtasks /Delete /TN footask /F"
>PsExec \\192.168.1.102 -u User -p pass cmd /c "type %TMP%\foo.txt"
C# EX.
string cmd = "¥¥\\192.168.1.102 -u User -p pass cmd /c \"echo \"C:¥\~¥\VBoxManage.exe\" list runningvms ^> \x25TMP\x25\foo.txt > \x25TMP\x25\\foo.bat\"";
追記
schtasksを使用してうまく動くコマンドと動かないコマンドがあるため、各コマンドの実行はテストして確かめること
例えば、A→Bにテレポートしたい場合
Bを待機、Aをテレポートさせるコマンドはそれぞれschtasksの方法で動くが、Bをスタートさせるstartvmコマンドは、待機するため制御が戻らずその後のコマンドが失敗する。
startvmコマンドを実行する時は、
>PsExec \\192.168.1.102 -u User -p pass -i -d "C:\~\VBoxManage.exe" startvm vmName
として、-i -dオプションを併用し、かつschtasksの方法は利用しないこと
コメント
コメントを投稿