概要
VMWare VIXのvmrun.exeを利用して、VMWare Playerの仮想マシンをコマンドプロンプトから起動したり終了したりコマンドを投入したりします。
必要なもの
- VMWare Player
- VMWare VIX
検証環境
ホスト環境
- Windows 8.1 64bit
- VMware-player-7.1.0-2496824
- VMware-VIX-1.14.1-2496824
仮想マシン
- FreeBSD 10.1 amd64
- pkgngから「open-vm-tools」(オープン版のVMWare Tools)をインストール済み
コマンドラインからの操作
- ESXi用のコマンドなど、Playerで動かないものは省きました。
- プラットフォームの指定について、VMWare Playerは「-T player」ですが、省いても動いたので省きました。
前準備
毎度毎度フルパスを書くには面倒なので、環境変数を設定しておきます。
set VMRUN_EXE="C:\Program Files (x86)\VMware\VMware VIX\vmrun.exe"
set VM_VMX=VM-FreeBSD.vmx
VMWare Toolsがなくてもできること
仮想マシンの起動・終了・再起動・サスペンドは、VMWare Toolsがなくても実行できます。
仮想マシンの起動(start)
rem 通常の起動
%VMRUN_EXE% start "%VM_VMX%"
rem GUIなし(非表示)で起動
%VMRUN_EXE% start "%VM_VMX%" nogui
仮想マシンの終了(stop)
rem シャットダウン
%VMRUN_EXE% stop "%VM_VMX%"
rem 強制シャットダウン
%VMRUN_EXE% stop "%VM_VMX%" hard
仮想マシンの再起動(reset)
rem 再起動
%VMRUN_EXE% reset "%VM_VMX%"
rem 強制再起動
%VMRUN_EXE% reset "%VM_VMX%" hard
仮想マシンのサスペンド(suspend)
rem サスペンド
%VMRUN_EXE% suspend "%VM_VMX%"
rem 強制サスペンド
%VMRUN_EXE% suspend "%VM_VMX%" hard
VMWare Toolsがあればできること
VMWare Toolsがインストール済みの仮想マシンに対しては、コマンドを実行したりファイルを転送したりできます。
※ユーザ名「hoge」パスワード「pass」を設定している場合、で検証します
<コマンド実行系>
※ユーザ名とパスワードが必要
プログラムの実行(runProgramInGuest)
rem とりあえずlsしてみる
%VMRUN_EXE% -gu hoge -gp pass runProgramInGuest "%VM_VMX%" /bin/ls
rem スクリプトを実行する(実行権限があるとき)
%VMRUN_EXE% -gu hoge -gp pass runProgramInGuest "%VM_VMX%" /home/hoge/aaa.sh
rem スクリプトを実行する(実行権限がないとき)
%VMRUN_EXE% -gu hoge -gp pass runProgramInGuest "%VM_VMX%" /bin/sh -c "/bin/sh /home/hoge/aaa.sh"
※カレントディレクトリは「/」になってました
※PATHが通ってないっぽいので、コマンドもフルパスで指定します
※実行結果はコンソールに表示されません
スクリプトの実行(runScriptInGuest)
%VMRUN_EXE% -gu hoge -gp pass runScriptInGuest "%VM_VMX%" /bin/sh /home/hoge/aaa.sh
runProgramInGuestとほとんど同じ。
こちらでは、インタプリタのパスとスクリプトのパスを指定します。
<プロセス操作系>
プロセスの一覧を表示(listProcessesInGuest)
%VMRUN_EXE% -gu hoge -gp pass listProcessesInGuest "%VM_VMX%"
プロセスを消す(killProcessInGuest)
%VMRUN_EXE% -gu hoge -gp pass killProcessInGuest "%VM_VMX%" 858
<ファイル操作系>
※ユーザ名とパスワードが必要
ファイルの存在をチェック(fileExistsInGuest)
rem ファイルが存在するとき
%VMRUN_EXE% -gu hoge -gp pass fileExistsInGuest "%VM_VMX%" /home/hoge/aaa.sh
rem => The file exists.
rem => %ERRORLEVEL% は 0 になる
rem ファイルが存在しないとき
%VMRUN_EXE% -gu hoge -gp pass fileExistsInGuest "%VM_VMX%" /home/hoge/bbb.sh
rem => The file does not exist.
rem => %ERRORLEVEL% は -1 になる
ファイル名を変更する(renameFileInGuest)
%VMRUN_EXE% -gu hoge -gp pass renameFileInGuest "%VM_VMX%" /home/hoge/from-file /home/hoge/to-file
ファイルを削除する(deleteFileInGuest)
%VMRUN_EXE% -gu hoge -gp pass deleteFileInGuest "%VM_VMX%" /home/hoge/to-file
ディレクトリの存在チェック(directoryExistsInGuest)
rem ディレクトリが存在するとき
%VMRUN_EXE% -gu hoge -gp pass directoryExistsInGuest "%VM_VMX%" /home/hoge
rem => The directory exists.
rem => %ERRORLEVEL% は 0 になる
rem ディレクトリが存在しないとき
%VMRUN_EXE% -gu hoge -gp pass directoryExistsInGuest "%VM_VMX%" /home/fugafuga
rem => The directory does not exist.
rem => %ERRORLEVEL% は -1 になる
ディレクトリを作成する(createDirectoryInGuest)
%VMRUN_EXE% -gu hoge -gp pass createDirectoryInGuest "%VM_VMX%" /home/hoge/newdir
ファイルの一覧を取得する(listDirectoryInGuest)
%VMRUN_EXE% -gu hoge -gp pass listDirectoryInGuest "%VM_VMX%" /home/hoge
ディレクトリを削除する(deleteDirectoryInGuest)
%VMRUN_EXE% -gu hoge -gp pass deleteDirectoryInGuest "%VM_VMX%" /home/hoge/newdir
<データ転送系>
※ユーザ名とパスワードが必要
ホストから仮想マシンへファイルを転送する(copyFileFromHostToGuest)
%VMRUN_EXE% -gu hoge -gp pass copyFileFromHostToGuest "%VM_VMX%" hostfile.txt /home/hoge/hostfile.txt
仮想マシンからホストへファイルを転送する(copyFileFromGuestToHost)
%VMRUN_EXE% -gu hoge -gp pass copyFileFromGuestToHost "%VM_VMX%" /home/hoge/guestfile.txt guestfile.txt
<共有フォルダ設定>
共有フォルダを有効にする(enableSharedFolders)
%VMRUN_EXE% enableSharedFolders "%VM_VMX%"
※再起動すると元に戻る
共有フォルダを無効にする(disableSharedFolders)
%VMRUN_EXE% disableSharedFolders "%VM_VMX%"
※再起動すると元に戻る
共有フォルダ設定を追加する(addSharedFolder)
%VMRUN_EXE% addSharedFolder "%VM_VMX%" sharename %CD%
※これは再起動しても残る
共有フォルダ設定を削除する(removeSharedFolder)
%VMRUN_EXE% removeSharedFolder "%VM_VMX%" sharename
共有フォルダの読み書き設定を変更する(setSharedFolderState)
rem 共有フォルダを書き込みOKの設定にする
%VMRUN_EXE% setSharedFolderState "%VM_VMX%" sharename %CD% writable
rem 共有フォルダを読み取り専用にする。ついでにホスト側のパスも変更する。
%VMRUN_EXE% setSharedFolderState "%VM_VMX%" sharename %CD%\..\ readonly
<その他>
※有効なログインユーザが必要
仮想マシンのスクリーンショットを取得する(captureScreen)
%VMRUN_EXE% -gu hoge -gp pass captureScreen "%VM_VMX%" %USERPROFILE%\Desktop\captuer.png
仮想マシンの環境変数に書き込む?(writeVariable)
よくわかりませんが、とりあえず記入
rem 一時変数の定義
%VMRUN_EXE% -gu hoge -gp pass writeVariable "%VM_VMX%" guestVar HOGE_VAR1 1111
rem 設定ファイルの変数を定義(.vmxファイルに保存される)
%VMRUN_EXE% -gu hoge -gp pass writeVariable "%VM_VMX%" runtimeConfig HOGE_VAR2 2222
rem 仮想マシンの環境変数に書き込み
%VMRUN_EXE% -gu root -gp vmpass writeVariable "%VM_VMX%" guestEnv HOGE_VAR3 3333
※「guestEnv」で書き込む場合、管理者ユーザを指定する必要あり。
仮想マシンの環境変数を表示?(readVariable)
よくわかりませんが、とりあえず記入
rem 一時変数から読み込み
%VMRUN_EXE% -gu hoge -gp pass readVariable "%VM_VMX%" guestVar HOGE_VAR1
rem 設定ファイルから読み込み
%VMRUN_EXE% -gu hoge -gp pass readVariable "%VM_VMX%" runtimeConfig HOGE_VAR2
rem 仮想マシンの環境変数から読み込み
%VMRUN_EXE% -gu root -gp vmpass readVariable "%VM_VMX%" guestEnv HOGE_VAR3
仮想マシンのメンテナンス
仮想マシンの一覧を表示(list)
%VMRUN_EXE% list
仮想マシンの削除(deleteVM)
%VMRUN_EXE% deleteVM "%VM_VMX%"
※仮想マシンが起動中は実行不可。stopしてから。
仮想マシンをコピー(clone)
%VMRUN_EXE% clone "%VM_VMX%" ..\distdir
※仮想マシンが起動中は実行不可。stopしてから。