2024 Mar. 24.
2024 Mar. 09.
環境
ホストOS:Windows 11 Home Edition
仮想化ソフト:VMware Workstation 17 Player
ゲストOS:Xubuntu 22.04
デフォルトのWindows 11 Home Editionでは管理者であるAdministratorユーザーのパスワードが設定されていないので、そのパスワードを設定する
(1) WindowsにてAdministratorユーザーでサインインする(パスワード入力不要)
(2) パスワードを変更する
設定 -> アカウント -> サインインオプション -> パスワード -> 変更
(3) Administratorユーザーからサインアウトする
ここからは、リモートデバイスのSSHクライアントからSSHサーバーが稼働しているWindowsに接続しておこなった。
(手法1)
管理者としてのコマンドプロンプトを開いた上でVMwareを起動する方法
(1) リモートデバイスのSSHクライアントからSSHサーバーが稼働しているWindowsに接続する
(2) Windowsのコマンドプロンプト上で、管理者としてのコマンドプロンプトを起動する
> runas /user:Administrator cmd Administratorのパスワード入力を求められる
(3) VMware仮想マシンのXubuntuをGUI無しで起動する
> "C:\Program Files (x86)\VMware\VMware Player\vmrun.exe" start "C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx" nogui &
(オプション)
コマンドを短縮するためにXubuntu起動コマンドをバッチファイル化する
cmd-admin.bat
runas /user:Administrator cmd
runvmxu.bat
@echo off "C:\Program Files (x86)\VMware\VMware Player\vmrun.exe" start "C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx" nogui
(手法2)
一般ユーザーにて管理者権限でVMware仮想マシンのXubuntuをGUI無しで起動する方法
以下はリモートデバイスからSSH接続して起動する例
参考 Windows Powershellでnohupみたいなことをする #Windows - Qiita
(1) リモートPowerShell実行を許可する
参考ページ:SSHクライアントからPowerShellを開けるようにするSSHサーバーWindowsの設定(リモートPowerShell実行の許可) - rokkonet
(2) リモートSSHクライアントデバイスからWindowsにSSH接続する。
Windowsのコマンドプロンプトに接続される。
(3) SSHクライアントにてPowerShellを開く
> powershell
(4) VMware Workstation/XubuntuをPowerShellとは非同期で起動する
> Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell & 'C:\Program Files (x86)\VMware\VMware Player\vmrun.exe' start 'C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx' nogui" (出力例) __GENUS : 2 __CLASS : __PARAMETERS __SUPERCLASS : __DYNASTY : __PARAMETERS __RELPATH : __PROPERTY_COUNT : 2 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : ProcessId : 11100 ReturnValue : 0 PSComputerName : このコマンドをバッチファイルにするとエラーになった。
(5) 上記でできるはずだが、管理者としてのPowerShellを起動する必要ある時は次のコマンドで管理者としてのPowerShellを開く
> powershell -Command "Start-Process powershell -Verb RunAs"
(6) 管理者としてのPowerShellが開いたら、VMware Workstation/XubuntuをPowerShellとは非同期で起動する
> Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell & 'C:\Program Files (x86)\VMware\VMware Player\vmrun.exe' start 'C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx' nogui"
次の方法では、SSH接続を切断するとVMwareが停止してしまった
参考 バッチを自動で管理者権限で実行する方法 #Windows - Qiita
(1) バッチファイルを作成する
runvmxu2.bat
@echo off whoami /priv | find "SeDebugPrivilege" > nul if %errorlevel% neq 0 ( @powershell start-process %~0 -verb runas exit ) "C:\Program Files (x86)\VMware\VMware Player\vmrun.exe" start "C:\Users\HOGE\Documents\Virtual Machines\xubuntu2204\xubuntu2204.vmx" nogui
@powershell start-process %~0 -verb runas
exit
について
(ChatGPTより)
@powershell start-process %~0 -verb runasの行によって、バッチファイル内で PowerShell プロセスが新しく開始されます。この際、-verb runasによって管理者権限で PowerShell が開始されます。
バッチファイルは exit コマンドに達し、バッチファイル自体の実行が終了します。
しかし、PowerShell プロセスはまだ実行中であり、バッチファイルを再起動しています。
@powershell
この部分は、PowerShellをバッチファイル内で実行することを示しています。@記号は、実行されるコマンドを表示しないようにします。
start-process
PowerShellで別のプロセスを開始するコマンドです。この場合、新しいインスタンスでバッチファイルを開始します。
%~0
これは、現在のバッチファイルのパスを指します。%0はバッチファイル自体を指し、~は引用符を除去するための修飾子です。
-verb runas
これは、開始するプロセスに管理者権限で実行するように指示します。-verb runasは、プロセスを管理者として実行するためのオプションです。