PMPの流儀

我が家の流儀

我が家で気になったことを夫婦で取り上げていきます

MENU

PowerShellから VMWare Linux を起動・シャットダウンする方法

PowerShellからVMWare のゲスト Linux を電源On, Off する方法を紹介します。PowerShellから制御することでWindows, Linux の連動動作を包含できますし、必要になった時だけ一時的にLinux自動起動・停止ができるため常駐させる必要がなく効率的です。

1. お手軽な方法

vmware のゲストOSの起動・シャットダウンのコントロールにはvmrun.exe を使用するのが簡単です。以前は VIX というパッケージをダウンロードしなければなりませんでしたが、Workstation Player 16 からは同梱されるようになりました。

1.1 起動

vmrun -T player start VMXのパス nogui

nogui をつけると ゲストOSを非表示で実行できます。Linux Server を起動してそのサービスのみを利用する場合はフォーカスを奪われることもないので便利です。

1.2 シャットダウン

vmrun -T player stop VMXのパス soft

最後に soft をつけると、OSのシャットダウン処理をさせることができます。

ただし、この機能を使うにはゲストOS で vmware tools が導入されていることが必要となります。VMware の裏ルートから伝達するわけです。

1.3 状態確認

スタートと、シャットダウンができるようになりましたが、それぞれの処理が完了したか vmrun で確認が取れます。

vmrun list

これにより稼働中のVMXの一覧が取得できます。vmrun は vmx のパスをキーとして使用しています。2重起動はできないのでキーとして使えるわけです。

2. vmrun に頼らない方法

vmrunを使用すると簡単にゲストOSを制御できますが、ホストとゲスト間を密な関係で使う時はいいのですが、影響を一切受けないように隔離するために仮想OSを立ち上げるケースもあります。このような場合、vmrun のようなバックドアは危険な存在になりえます。

ひと手間かかりますが vmrun を使用しない方法もあります。

2.1 起動

起動は簡単です。

vmplayer.exe vmxのパス

PowerShellからなら以下です。最小化状態で起動することもできます。

$vmp = Start-Process -FilePath vmplayer.exe -ArgumentList VMXのパス -WindowStyle Minimized -PassThru

2.2 シャットダウン

問題はシャットダウンです。どのように Linux にシャットダウンさせるかです。

TeraTerm でログインし root に変身して shutdown かけるマクロを作ったのですが、rootのパスワードをマクロ内に書くことはポリシーに合いませんでした。 最終的にたどり着いたのは以下の方法です

(1). linux 内でディレクトリの変化監視を行うスクリプトを作成してデーモン化して常駐させる。
(2). ssh のファイル転送機能を使って、シャットダウン要求用のファイルを Linux 側に書き込む。
(3). linuxスクリプトが変化を検知して、シャットダウンする。

ssh を使うことで、スクリプト内にパスワードは持たずにシャットダウンさせることができます。

まず linux 側のスクリプトです。 inotifywait コマンドにより、ファイルシステムの変化待ちをすることができます。poweroff というファイルが作成されたことを検知するとシャットダウンします。

#!/bin/bash

rm -f /opt/pcntl/*

inotifywait -e create -m  /opt/pcntl | \
while read x; do
        if [[ $x =~ [[:blank:]]poweroff$ ]]; then
                rm -f /opt/pncntl/*
                echo "poweroff"
                poweroff
        fi
done

次に Windows側のスクリプトです

        scp  .\poweroff username@host:/opt/pcntl

scpは ssh を使ったファイル転送コマンドです。接続に関しては ssh と同じです。Windows11 から ssh クライアントが標準に取り込まれたので簡単に呼び出せます。 poweroff という空ファイルを /opt/pcntl に送り込んでいます。

これにより、Linux の外部からのシャットダウン処理を VMware に頼らずにできるようになりました。