はじめに
最近、検証用としてHyper-VでAlmaLinuxのVMを作ることが多い。 VMの状態が崩れたら、一から作り直しているが、Hyper-V マネージャーから作り直すのは面倒だ。 そのため、最近はPowerShellでHyper-Vを操作するようにしている。 PowerShellでVMを作成・削除する手順を備忘録として残しておく。
VM作成手順
前提
Hyper-Vは有効化しているとする。有効化の手順は、Microsoftのドキュメントを参考。
ホストのOSはWindows11。今回、ゲストOSはAlmaLinux 10.1にする。
isoのダウンロード
事前にAlmaLinux 10.1のisoイメージを公式からダウンロードしておく。 今回は最小限(minimal)を使う。
%USERPROFILE%\Downloads\に置くことにする。
VMの作成
変数設定
PowerShellを起動し、次のコマンドで作成したいVMの設定を行う。
# VMの名前(好きな名前でOK)
$vmName = "AlmaLinux10-1-sandbox"
# 作成したVMに関連するファイル(チェックポイント等)の保存先(好きなパスでOK)
$vmPath = "$env:USERPROFILE\Hyper-V\$vmName"
# VMの.vhdxファイルの保存先
$vhdPath = "$vmPath\$vmName.vhdx"
# ダウンロードしたAlmaLinux ISOの保存先
$isoPath = "$env:USERPROFILE\Downloads\AlmaLinux-10.1-x86_64-minimal.iso"
# 接続する仮想スイッチ名
$switchName = "Default Switch"
# 動的メモリを使用するかどうか
$dynamicMemoryEnabled = $true
# VM起動時に割り当てるメモリサイズ
$memoryStartupBytes = 4GB
# 最小メモリ
$minimumBytes = 2GB
# 最大メモリ
$maximumBytes = 8GB
# VMの仮想ストレージの最大サイズ
$vhdSizeBytes = 40GB
# VMに割り当てる仮想CPUコア数
$processorCount = 2
# 仮想マシンの世代
$generation = 2
VMを作成する
先ほど設定した変数を使って、VMを作成する。
New-VM `
-Name $vmName `
-Path $vmPath `
-NewVHDPath $vhdPath `
-SwitchName $switchName `
-NewVHDSizeBytes $vhdSizeBytes `
-Generation $generation
CPUコア数の設定
作成したVMに対して、CPUコア数を設定する。(今回の場合は2コア)
Set-VMProcessor -VMName $vmName -Count $processorCount
メモリの設定
作成したVMに対して、メモリを設定する。
Set-VMMemory `
-VMName $vmName `
-DynamicMemoryEnabled $dynamicMemoryEnabled `
-StartupBytes $memoryStartupBytes `
-MinimumBytes $minimumBytes `
-MaximumBytes $maximumBytes
チェックポイントを無効にする
もし、チェックポイント機能が必要であれば、この設定はスキップする。
Set-VM -Name $vmName -CheckpointType Disabled
DVDドライブにAlmaLinux ISOを接続
VMの仮想DVDドライブにAlmaLinux ISOを入れる。
Add-VMDvdDrive -VMName $vmName -Path $isoPath
起動順をDVD優先にする
DVDを最初に起動するようにする。
$dvdDrive = Get-VMDvdDrive -VMName $vmName
Set-VMFirmware -VMName $vmName -FirstBootDevice $dvdDrive
Secure Bootを設定
Secure Bootを有効にする。
Set-VMFirmware -VMName $vmName -EnableSecureBoot On -SecureBootTemplate MicrosoftUEFICertificateAuthority
VMを起動
Start-VM -Name $vmName
VMに接続する
VMのコンソール画面が立ち上がる。
vmconnect.exe localhost $vmName
VM作成から接続までのスクリプト
以下はこれまでの手順をまとめたスクリプト。これをPowerShellで実行すれば、VM作成から接続まで可能。
$vmName = "AlmaLinux10-1-sandbox"
$vmPath = "$env:USERPROFILE\Hyper-V\$vmName"
$vhdPath = "$vmPath\$vmName.vhdx"
$isoPath = "$env:USERPROFILE\Downloads\AlmaLinux-10.1-x86_64-minimal.iso"
$switchName = "Default Switch"
$dynamicMemoryEnabled = $true
$memoryStartupBytes = 4GB
$minimumBytes = 2GB
$maximumBytes = 8GB
$vhdSizeBytes = 40GB
$processorCount = 2
$generation = 2
New-VM `
-Name $vmName `
-Path $vmPath `
-NewVHDPath $vhdPath `
-SwitchName $switchName `
-NewVHDSizeBytes $vhdSizeBytes `
-Generation $generation
Set-VMProcessor -VMName $vmName -Count $processorCount
Set-VMMemory `
-VMName $vmName `
-DynamicMemoryEnabled $dynamicMemoryEnabled `
-StartupBytes $memoryStartupBytes `
-MinimumBytes $minimumBytes `
-MaximumBytes $maximumBytes
Set-VM -Name $vmName -CheckpointType Disabled
Add-VMDvdDrive -VMName $vmName -Path $isoPath
$dvdDrive = Get-VMDvdDrive -VMName $vmName
Set-VMFirmware -VMName $vmName -FirstBootDevice $dvdDrive
Set-VMFirmware -VMName $vmName -EnableSecureBoot On -SecureBootTemplate MicrosoftUEFICertificateAuthority
Start-VM -Name $vmName
vmconnect.exe localhost $vmName
VMの削除
VMをHyper-V マネージャーだったり、Remove-VMコマンドで削除したとしても、.vhdxファイルは削除されない。
この.vhdxはVMの仮想ディスクファイルで、サイズがとても大きい。
.vhdxを消さずにいると、コンピュータの容量が逼迫してしまうため、.vhdxファイルの削除も行うこと。
VMの削除スクリプト
Remove-VMでVMを削除した後、作成したVM関連ファイルをフォルダごと削除する。
# 作成したVMの名前
$vmName = "AlmaLinux10-1-sandbox"
# VM関連ファイルのパス
$vmPath = "$env:USERPROFILE\Hyper-V\$vmName"
# VMを停止する
$vm = Get-VM -Name $vmName -ErrorAction Stop
if ($vm.State -ne 'Off') {
Stop-VM -Name $vmName -TurnOff -Force
while ((Get-VM -Name $vmName).State -ne 'Off') {
Start-Sleep -Seconds 1
}
}
# VMを削除する
Remove-VM -Name $vmName -Force
# VM関連ファイルをフォルダごと削除する
if (Test-Path -LiteralPath $vmPath) {
Remove-Item -LiteralPath $vmPath -Recurse -Force
}
おわりに
Vagrantなどの選択肢もあるが、今回はHyper-VをPowerShellから直接操作する構成としてまとめた。

コメント