1 Enable Hyper-V
Enable-WindowsOptionalFeature -Online -FeatureName:Microsoft-Hyper-V -All
2 Create virtual switch
$NetNetAdapter = (Get-NetAdapter)[0]
New-VMSwitch -Name 'External Virtual Network Switch' -NetAdapterName $NetNetAdapter.Name -AllowManagementOS $TRUE
https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/connect-to-network
https://docs.microsoft.com/en-us/powershell/module/hyper-v/new-vmswitch?view=win10-ps
3 Create virtual hard disk
$VHDFilePath = 'd:\test.vhdx'
New-VHD -Path $VHDFilePath -Dynamic -SizeBytes 32GB
# 回收文件系统中未使用的块资源
fstrim /
https://docs.microsoft.com/en-us/powershell/module/hyper-v/new-vhd?view=win10-ps
4 Create virtual machine
$VMName = 'test_vm'
$VMPath = "d:\$VMName"
$VMSwitch = 'External Virtual Network Switch'
$InstallMedia = 'd:\en_windows_server_2016_x64_dvd_9718492.iso'
$VHDFilePath = 'd:\test.vhdx'
# Create New Virtual Machine
New-VM -Name $VMName -Generation 2 -VHDPath $VHDFilePath -SwitchName $VMSwitch -MemoryStartupBytes 2147483648 -Path $VMPath
# Add DVD Drive to Virtual Machine
Add-VMScsiController -VMName $VMName
Add-VMDvdDrive -VMName $VMName -ControllerNumber 1 -ControllerLocation 0 -Path $InstallMedia
# Mount Installation Media
$DVDDrive = Get-VMDvdDrive -VMName $VMName
# Configure Virtual Machine to Boot from DVD
Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive
5 config
# linux
Vm-From-Json -JsonFilePath D:\_code\blog\src\powershell\hyper-v\linux.json
# windows
Vm-From-Json -JsonFilePath D:\_code\blog\src\powershell\hyper-v\windows.json
Hyper-V Json
{
"name": "deb1",
"generation": 2,
"path": "e:\\_hyper-v",
"automatic": {
"start": "Nothing",
"stop": "ShutDown",
"checkpoint": false
},
"boot": {
"secure": "Off"
},
"checkpoint": {
"type": "Disabled"
},
"cpu": {
"count": 4
},
"mem": {
"min": "1GB",
"max": "4GB"
},
"net": {
"switch": "HVS",
"mac": "00:15:5D:02:02:01"
},
"vhd": {
"path": "e:\\_vhd",
"size": "127GB",
"blockSize": "1MB"
},
"dvd": {
"iso": "z:\\_iso\\debian-12.1.0-amd64-dvd-1.9168ff53d789537db4f5233e7dfa5e860519c44b68132b70805218f842b00041.iso"
}
}
{
"name": "testlinuxvm",
"generation": 2,
"path": "e:\\_hyper-v",
"automatic": {
"start": "Nothing",
"stop": "ShutDown",
"checkpoint": false
},
"boot": {
"secure": "Off"
},
"checkpoint": {
"type": "Disabled"
},
"cpu": {
"count": 2
},
"mem": {
"min": "1GB",
"max": "4GB"
},
"net": {
"switch": "HVS",
"mac": "00:15:5D:02:02:01"
},
"vhd": {
"path": "z:\\_vhd",
"size": "127GB",
"blockSize": "1MB"
},
"dvd": {
"iso": "z:\\linux.iso"
}
}
{
"name": "ltsc2019",
"generation": 2,
"path": "e:\\_hyper-v",
"automatic": {
"start": "Nothing",
"stop": "ShutDown",
"checkpoint": false
},
"boot": {
"secure": "On"
},
"checkpoint": {
"type": "Disabled"
},
"cpu": {
"count": 8
},
"mem": {
"min": "8GB",
"max": "16GB"
},
"net": {
"switch": "HVS",
"mac": "00:15:5D:02:02:09"
},
"vhd": {
"path": "e:\\_vhd",
"size": "127GB",
"blockSize": "32MB"
},
"dvd": {
"iso": null
}
}
{
"name": "ltsc2021",
"generation": 2,
"path": "e:\\_hyper-v",
"automatic": {
"start": "Nothing",
"stop": "ShutDown",
"checkpoint": false
},
"boot": {
"secure": "Off"
},
"checkpoint": {
"type": "Disabled"
},
"cpu": {
"count": 8
},
"mem": {
"min": "8GB",
"max": "16GB"
},
"net": {
"switch": "HVS",
"mac": "00:15:5D:02:02:09"
},
"vhd": {
"path": "e:\\_vhd",
"size": "127GB",
"blockSize": "32MB"
},
"dvd": {
"iso": "z:\\_iso\\sw_dvd9_win_10_ltsc_2021_64bit_chnsimp_mlf_x22-84402.60ee40b9c76c228832d07c6157155c1cfccba959.iso"
}
}
{
"name": "openwrt",
"generation": 1,
"path": "e:\\_hyper-v",
"automatic": {
"start": "Nothing",
"stop": "ShutDown",
"checkpoint": false
},
"boot": {
"secure": "Off"
},
"checkpoint": {
"type": "Disabled"
},
"cpu": {
"count": 2
},
"mem": {
"min": "512MB",
"max": "1GB"
},
"net": {
"switch": "HVS",
"mac": "00:15:5D:02:02:A1"
},
"vhd": {
"path": "e:\\_vhd",
"size": "16GB",
"blockSize": "1MB"
},
"dvd": {
"iso": null
}
}
{
"name": "tnas",
"generation": 2,
"path": "e:\\_hyper-v",
"automatic": {
"start": "Nothing",
"stop": "ShutDown",
"checkpoint": false
},
"boot": {
"secure": "Off"
},
"checkpoint": {
"type": "Disabled"
},
"cpu": {
"count": 4
},
"mem": {
"min": "1GB",
"max": "8GB"
},
"net": {
"switch": "HVS",
"mac": "00:15:5D:02:02:A2"
},
"vhd": {
"path": "e:\\_vhd",
"size": "127GB",
"blockSize": "1MB"
},
"dvd": {
"iso": "z:\\_iso\\truenas-scale-22.12.3.3.6c5742b936cb5f0daea41333e23147eaae884834a1307952a55b1623b8f2c6e2.iso"
}
}
{
"name": "win7",
"generation": 1,
"path": "e:\\_hyper-v",
"automatic": {
"start": "Nothing",
"stop": "ShutDown",
"checkpoint": false
},
"boot": {
"secure": "Off"
},
"checkpoint": {
"type": "Disabled"
},
"cpu": {
"count": 2
},
"mem": {
"min": "1GB",
"max": "4GB"
},
"net": {
"switch": "HVS",
"mac": "00:15:5D:02:02:07"
},
"vhd": {
"path": "e:\\_vhd",
"size": "127GB",
"blockSize": "32MB"
},
"dvd": {
"iso": "z:\\_iso\\cn_windows_7_professional_with_sp1_vl_build_x64_dvd_u_677816.647b26479a3a46c078f5b1364a89003a31f4aada.iso"
}
}
{
"name": "testwindowsvm",
"generation": 2,
"path": "e:\\_hyper-v",
"automatic": {
"start": "Nothing",
"stop": "ShutDown",
"checkpoint": false
},
"boot": {
"secure": "Off"
},
"checkpoint": {
"type": "Disabled"
},
"cpu": {
"count": 2
},
"mem": {
"min": "1GB",
"max": "4GB"
},
"net": {
"switch": "HVS"
},
"vhd": {
"path": "z:\\_vhd",
"size": "127GB",
"blockSize": "32MB"
},
"dvd": {
"iso": "z:\\windows.iso"
}
}
6 参考引用
https://docs.microsoft.com/en-us/virtualization/index#pivot=main&panel=server
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/hyper-v-on-windows-server