Для получения списка виртуальных машин используем командлет Get-VM:
Get-VM
В результате вывода мы получим список всех виртуальных машин на данном хосте. Описание будет двольно краткое. Если нужна более подробная информация о конкретной виртуальной машине, можно вопспользоваться командой:
Get-VM -Name VM_LIN_GLADIS | fl *
Список только запущенных машин на указанном ПК или Сервере:
Get-VM -ComputerName Server1 | Where-Object {$_.State -eq 'Running'}
Запуск или завершение работы указанной машины осуществляется заклинаниями:
Start-VM -Name VM_LIN_1
Stop-VM -Name VM_LIN_1
При выключении ключ -Force позволит завершить работу без подтверждения.
Если машина совсем зависла можно «выключить ее из розетки»:
Stop-VM -Name VM_LIN_1 -TurnOff
Запуск машин, c названиями по маске:
Start-VM -Name VM_LIN*
Запуск всех выключенных виртуальных машин:
Get-VM | where {$_.State -eq 'Off'} | Start-VM
Удалить виртуальную машину принудительно:
Remove-VM "VM_LIN_1" -Force
Переименовать виртуальную машину легко:
Rename-VM "VM_LIN_1" -NewName "VM_LIN_1_OLD"
Очень полезная функция, позволяет задать размер оперативной памяти для указанной виртуальной машины:
Get-VM -Name VM_LIN_1| Set-VMMemory -StartupBytes 4Gb
Так же можно изменить количество выделенных процессоров:
Set-VMProcessor VM_LIN_1 -Count 4
Найдите существующие сетевые адаптеры, выполнив командлет Get-NetAdapter. Определите имя сетевого адаптера, которое вы хотите использовать для виртуального коммутатора.
Get-NetAdapter
Чтобы создать внешний виртуальный коммутатор, выполните следующие команды, заменив нужные значения собственными.
New-VMSwitch -Name <switch-name> -NetAdapterName <netadapter-name>
Чтобы создать внутренний или закрытый коммутатор, выполните следующую команду. Опять же, замените именя коммутатора и его тип: либо Internal или Private
New-VMSwitch -Name <switch-name> -SwitchType <switchtype>
Пример скрипта для создания виртуальной машины:
$VMName = "VM_WIN_WAZUH"
#Задаем имя будущей ВМ
$VM = @{
Name = $VMName
MemoryStartupBytes = 4Gb
Generation = 2
#Задаем поколение будущей ВМ
NewVHDPath = "D:\Hyper-V\$VMName\Virtual Hard Disks\$VMName.vhdx"
NewVHDSizeBytes = 30Gb
BootDevice = "VHD"
Path = "D:\Hyper-V"
SwitchName = "net_1"
}
New-VM @VM
Get-VM $VMName |Set-VMMemory -DynamicMemoryEnabled $false
#Данная опция отключает динамическую память на ВМ, я ее не использую.
#Существует возможность задать диаппазон динамической памяти при ее использовании.
Set-VMFirmware $VMName -EnableSecureBoot Off
#Отключаем безопасную загрузку для новой ВМ, если требуется.
Set-VM $VMName -AutomaticCheckpointsEnabled $false
#Отключаем автоматические чекпоинты, если это требуется.
Get-VM $VMName | Set-VMProcessor -Count 1
#Для существующей ВМ задаем количество процессоров.
А вот скрипт, который будет запрашивать параметры вирутальной машины (название, расположение, объем памяти, объем виртуального диска, сетевой адаптер, поколение, количество ядер), а так же добавит в DVD привод нужный мне диск:
Write-Host " Работает на Windows 10++ и Windows Server 2016+ " -ForegroundColor black -BackgroundColor Red
Write-Host " Для создания виртуальной машины ответьте на ряд вопросов: " -ForegroundColor Green -BackgroundColor White
Write-Host " " -ForegroundColor Green -BackgroundColor White
$SRV = Read-Host "Укажите название вирутальной машины (Нажмите [Enter] что бы выбрать Server01): "
if ($SRV -eq ""){$SRV="Server01"} ; if ($SRV -eq $NULL){$SRV="Server01"}
[int]$SRAM = Read-Host "Укажите объем оперативной памяти в мегабайтах (Нажмите [Enter] для выбора 1024MB): "
if ($SRAM -eq ""){$SRAM=1014} ; if ($SRAM -eq $NULL){$SRAM=1024}
[int]$SRVVHD = Read-Host "Укажите обем жесткого диска в гигабайтах (Нажмите [Enter] для выбора 40GB): "
if ($SRVVHD -eq ""){$SRVVHD=40} ; if ($SRVVHD -eq $NULL){$SRVVHD=40}
$VMLOC = Read-Host "Укажите расположение файлов виртуальной машины (Нажмите [Enter] для выбора M:\Hyper-V): "
if ($VMLOC -eq ""){$VMLOC="M:\Hyper-V"} ; if ($VMLOC -eq $NULL){$VMLOC="M:\Hyper-V"}
$NETWORK = Read-Host "Укажите имя виртуального коммутатора (Нажмите [Enter] для выбора lan_1): "
if ($NETWORK -eq ""){$NETWORK="lan_1"} ; if ($NETWORK -eq $NULL){$NETWORK="lan_1"}
$GENERATION = Read-Host "Укажите поколение виртуальной машины (Нажмите [Enter] что бы выбрать 2 поколение): "
if ($GENERATION -eq ""){$GENERATION="2"} ; if ($GENERATION -eq $NULL){$GENERATION="2"}
$COUNT = Read-Host "Укажите количество виртуальных процессоров (Нажмите [Enter] для выбора 2): "
if ($COUNT -eq ""){$COUNT="2"} ; if ($COUNT -eq $NULL){$COUNT="2"}
$DEB12ISO = "D:\install\ISO\debian-12.0.0-amd64-netinst.iso"
$VM = @{
Name = $SRV
MemoryStartupBytes = $SRAM * 1024 * 1024
Generation = $GENERATION
NewVHDPath = "$VMLOC\$SRV\Virtual Hard Disks\$SRV.vhdx"
NewVHDSizeBytes = $SRVVHD * 1024 * 1024 * 1024
BootDevice = "VHD"
Path = "$VMLOC"
SwitchName = $NETWORK
}
New-VM @VM
Get-VM $SRV | Set-VMMemory -DynamicMemoryEnabled $false
Set-VM $SRV -AutomaticCheckpointsEnabled $false
Get-VM $SRV | Set-VMProcessor -Count $COUNT
Add-VMDvdDrive $SRV -Path $DEB12ISO
if ($GENERATION -eq 2){Set-VMFirmware $SRV -EnableSecureBoot Off}
Write-Host " Создание виртуальной машины завершено! " -ForegroundColor White -BackgroundColor Green
Write-Host "=======================================================================================" -ForegroundColor White -BackgroundColor Green
Что бы русский язык в скрипте отображался верно, я создавал документ в Visual Studio Code в кодировке Windows 1251
По умолчанию скрипт создаст виртуальную машину максимально возможной версии конфигурации. Для того, что бы создавать например именно 8 версию, модернизируем скрипт:
Write-Host " Работает на Windows 10++ и Windows Server 2016+ " -ForegroundColor black -BackgroundColor Red
Write-Host " Внимание! Будет создана виртуальная машина 8 версии конфигуарции!!! " -ForegroundColor black -BackgroundColor White
Write-Host " Для создания виртуальной машины ответьте на ряд вопросов: " -ForegroundColor black -BackgroundColor White
$SRV = Read-Host "Укажите название вирутальной машины (Нажмите [Enter] что бы выбрать Server01): "
if ($SRV -eq ""){$SRV="Server01"} ; if ($SRV -eq $NULL){$SRV="Server01"}
[int]$SRAM = Read-Host "Укажите объем оперативной памяти в мегабайтах (Нажмите [Enter] для выбора 1024MB): "
if ($SRAM -eq ""){$SRAM=1014} ; if ($SRAM -eq $NULL){$SRAM=1024}
[int]$SRVVHD = Read-Host "Укажите объем жесткого диска в гигабайтах (Нажмите [Enter] для выбора 20GB): "
if ($SRVVHD -eq ""){$SRVVHD=40} ; if ($SRVVHD -eq $NULL){$SRVVHD=20}
$VMLOC = Read-Host "Укажите расположение файлов виртуальной машины (Нажмите [Enter] для выбора D:\vm): "
if ($VMLOC -eq ""){$VMLOC="D:\vm"} ; if ($VMLOC -eq $NULL){$VMLOC="D:\vm"}
$NETWORK = Read-Host "Укажите имя виртуального коммутатора (Нажмите [Enter] для выбора com1): "
if ($NETWORK -eq ""){$NETWORK="com1"} ; if ($NETWORK -eq $NULL){$NETWORK="com1"}
$GENERATION = Read-Host "Укажите поколение виртуальной машины (Нажмите [Enter] что бы выбрать 1 поколение): "
if ($GENERATION -eq ""){$GENERATION="1"} ; if ($GENERATION -eq $NULL){$GENERATION="1"}
$COUNT = Read-Host "Укажите количество виртуальных процессоров (Нажмите [Enter] для выбора двух процессоров): "
if ($COUNT -eq ""){$COUNT="2"} ; if ($COUNT -eq $NULL){$COUNT="2"}
#Соберем все необходимые данные
$VM = @{
Name = $SRV
MemoryStartupBytes = $SRAM * 1024 * 1024
Generation = $GENERATION
NewVHDPath = "$VMLOC\$SRV\Virtual Hard Disks\$SRV.vhdx"
NewVHDSizeBytes = $SRVVHD * 1024 * 1024 * 1024
BootDevice = "VHD"
Path = "$VMLOC"
SwitchName = $NETWORK
}
#Запуск создания виртуальной машины
New-VM @VM -Version 8.0
#Отключим динамическую ОЗУ
Get-VM $SRV | Set-VMMemory -DynamicMemoryEnabled $false
#Отключим автоматическое создание чекпоинтов
Set-VM $SRV -AutomaticCheckpointsEnabled $false
#Зададим указанное ранее количество виртуальных процессоров
Get-VM $SRV | Set-VMProcessor -Count $COUNT
#Приведем виртуальную машину к состоянию готовности миграции на сервер с иной конфигурацией процессора
Get-VM $SRV | Set-VMProcessor -CompatibilityForMigrationEnabled $true
#Если была создана машина второго поколения, то отключаем безопасную загрузку.
if ($GENERATION -eq 2){Set-VMFirmware $SRV -EnableSecureBoot Off}
Write-Host " Создание виртуальной машины завершено! " -ForegroundColor black -BackgroundColor Green
Write-Host "=======================================================================================" -ForegroundColor black -BackgroundColor Green