Bài viết này nói về quản lý máy ảo Hyper-V từ bảng điều khiển PowerShell. Chúng ta sẽ xem cách tạo virtual switch và máy ảo, thay đổi cài đặt VM, và quản lý VM. Bạn có thể dùng các lệnh này để quản lý thủ công Hyper-V VM của mình hoặc trong script PowerShell để tự động hóa các tác vụ khác nhau.
Cách bật vai trò Hyper-V trên Windows Server và Windows 10/11
Để cài đặt vai trò Hyper-V, máy chủ phải có CPU hỗ trợ SLAT và ảo hóa. Trên Windows Server, lệnh PowerShell sau được dùng để cài đặt vai trò Hyper-V:
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
Trong các phiên bản desktop (Windows 10 và 11), vai trò Hyper-V được cài đặt như sau:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V –All
Để quản lý máy chủ Hyper-V, module Hyper-V PowerShell phải được cài đặt trên máy tính. Bạn có thể hiển thị danh sách đầy đủ các lệnh có sẵn (chúng phụ thuộc vào phiên bản Windows của bạn) như sau:
Get-Command -Module hyper-v

Trong Windows Server 2022, có 245 cmdlet có sẵn trong module Hyper-V.
Để hiển thị danh sách cài đặt máy chủ Hyper-V, dùng lệnh dưới đây:
Get-VMHost|fl *
Để chỉ hiển thị thông tin về số lõi CPU khả dụng và RAM:
Get-VMHost| select LogicalProcessorCount, MemoryCapacity

Dùng Set-VMHost để thay đổi cài đặt máy chủ Hyper-V. Lệnh sau sẽ thay đổi đường dẫn mặc định đến ổ đĩa ảo và file cấu hình VM:
Set-VMHost -VirtualMachinePath E:\VMs -VirtualHardDiskPath E:\VMs\VHD'
Tạo Hyper-V Virtual Switch bằng PowerShell
Trước hết, tạo virtual switch trên máy chủ Hyper-V của bạn. Máy ảo chỉ có thể truy cập mạng qua virtual switch.
Hãy hiển thị danh sách các card mạng vật lý có sẵn trên máy chủ Hyper-V:
Get-NetAdapter | where {$_.status -eq "up"}
Nếu máy chủ của bạn hỗ trợ SR-IOV (Single-Root Input/Output (I/O) Virtualization), hãy lưu ý rằng bạn nên bật tùy chọn này khi tạo switch. Bạn không thể bật SR-IOV cho vSwitch hiện có. Tìm hiểu thêm về cách bật hỗ trợ SR-IOV cho VM Hyper-V.
Tạo virtual switch bên ngoài (external):
New-VMSwitch -Name "ExternalVMSwitch" -AllowManagementOS $True -NetAdapterName Ethernet0 -SwitchType External

Tạo máy ảo Hyper-V bằng PowerShell
Để tạo máy ảo Hyper-V mới, cmdlet New-VM được sử dụng. Trong ví dụ này, chúng ta sẽ tạo VM Generation 2 mới với 1GB RAM và ổ đĩa VHDX 10 GB.
$VMName = "mun-prx2"
$VM = @{
Name = $VMName
MemoryStartupBytes = 1Gb
Generation = 2
NewVHDPath = "E:\HV\$VMName\$VMName.vhdx"
NewVHDSizeBytes = 10Gb
BootDevice = "VHD"
Path = "E:\HV\$VMName"
SwitchName = "ExternalVMSwitch"
}
New-VM @VM

Đây là ví dụ sử dụng PowerShell để tạo máy ảo Windows 11 trên Hyper-V.
Hãy xem các lệnh bạn có thể dùng để thay đổi cài đặt VM.
Để tăng kích thước RAM cho VM:
Get-VM -Name mun-prx2| Set-VMMemory -StartupBytes 2Gb
Để thay đổi số vCPU:
Set-VMProcessor mun-prx2 -Count 2
Bật khởi động tự động cho máy ảo Hyper-V:
Get-VM –VMname mun-prx2 | Set-VM –AutomaticStartAction Start
Để kết nối ổ đĩa ảo bổ sung vào VM, tạo file vhdx trước:
New-VHD -Path 'C:\VM\new-prx2-drive.vhdx' -SizeBytes 2GB
Sau đó kết nối nó với VM của bạn:
Add-VMHardDiskDrive -VMName mun-prx2 -Path 'C:\VM\new-prx2-drive.vhdx'
Cách quản lý VM Hyper-V bằng PowerShell?
Để hiển thị danh sách máy ảo trên máy chủ Hyper-V:
Get-VM

Lệnh trả về danh sách VM với một số thuộc tính cơ bản. Để hiển thị tất cả thuộc tính VM, chạy lệnh dưới đây:
Get-VM -Name mun-dmz1 | fl *
Để chỉ hiển thị VM đang chạy:
Get-VM | where {$_.State -eq 'Running'}
Để khởi động máy ảo:
Start-VM -Name mun-app01
Để khởi động tất cả máy ảo đã dừng:
Get-VM | where {$_.State -eq 'Off'} | Start-VM
Tắt VM (tắt đúng cách sử dụng Integration Services trong guest OS):
Stop-VM -Name mun-app01
Để tắt nguồn VM, tùy chọn TurnOff được dùng:
Stop-VM -Name mun-app01 –TurnOff
Tìm hiểu cách dừng máy ảo Hyper-V không phản hồi.
Gắn file ISO vào thiết bị CD/DVD ảo:
Set-VMDvdDrive -VMName mun-app01 -Path c:\iso\WinSrv2022.iso
Bạn có thể dùng USB passthrough để chuyển hướng thiết bị USB (media/ổ cứng) đến VM Hyper-V.
Để di chuyển tất cả file VM sang ổ đĩa khác ngay lập tức, dùng lệnh dưới đây:
Move-VMStorage mun-app01 -DestinationStoragePath D:\VM\mun-app01
Bạn có thể mở rộng hoặc thu nhỏ file ảo đĩa bằng cmdlet Resize-VHD:
Resize-VHD -Path 'C:\VM\mun-fs01.vhdx' -SizeBytes 50Gb
Để tạo checkpoint (snapshot) của VM:
Get-VM -Name mun-app01| Checkpoint-VM -SnapshotName "Before upgrading SAP"
Để hiển thị danh sách checkpoint có sẵn:
Get-Vm -Name mun-app01| Get-VMCheckpoint

Để khôi phục VM về trạng thái trước đó từ checkpoint:
Restore-VMCheckpoint -Name "Before upgrading SAP" -VMName mun-app01 -Confirm:$false
Để xóa snapshot:
Remove-VMCheckpoint -VMName mun-app01 -Name "Before upgrading SAP"
Xuất nhập, nhập và sao chép VM trong Hyper-V được mô tả trong bài viết này:
Export-VM -Name mun-app01 -Path 'C:\VHD\export' -CaptureLiveState CaptureCrashConsistentState
Bạn có thể dùng Windows Server Backup (WSB) tích hợp để backup máy ảo Hyper-V.
Để lấy địa chỉ IP của guest OS của máy ảo:
Get-VM | Select -ExpandProperty NetworkAdapters | Select VMName, IPAddresses, Status
Để kết nối vào console máy ảo:
vmconnect.exe localhost mun-app01

Bạn có thể dùng PowerShell Direct để kết nối trực tiếp đến guest OS của máy ảo qua vmbus (có sẵn trong Windows Server 2016, Windows 10 và mới hơn). Dùng Invoke-Command (để chạy script) và Enter-PSSession (để chạy phiên PowerShell tương tác):
Invoke-Command -VMName mun-app01 -ScriptBlock {Get-Process}
Enter-PSSession -VMName mun-app01
Để sao chép file từ máy chủ Hyper-V sang máy ảo bằng PowerShell Direct, dùng lệnh sau:
$PSSession = New-PSSession -VMName mun-app01 -Credential (Get-Credential)
Copy-Item -ToSession $PSSession -Path E:\ISO\install_image.iso -Destination D:\ISO\
Bạn có thể dùng PowerShell để quản lý máy ảo trên máy chủ Hyper-V cục bộ hoặc từ xa (trên Windows Server Full GUI hoặc Server Core, trên Windows Hyper-V Server miễn phí, hoặc Windows 10) cùng với các công cụ đồ họa như Hyper-V Manager hoặc Windows Admin Center.