Управление виртуальными машинами Hyper-V с помощью PowerShell

Управление виртуальными машинами Hyper-V с помощью PowerShell

Статья посвящена особенностям управления виртуальными машинами Hyper-V из консоли PowerShell. Мы рассмотрим создание виртуальных коммутаторов и виртуальных машин, изменение настроек ВМ и управление ими. Вы сможете использовать рассмотренные команды для ручного управления своими ВМ или в PowerShell скриптах для автоматизации различных задачей.

Установка роли Hyper-V в Windows Server и Windows 10

Для установки роли Hyper-V хост должен иметь процессор, поддерживающий виртуализацию со SLAT. В Windows Server для установки роли Hyper-V используется команда:

Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

В десктопных редакциях (Windows 10 и 11) роль Hyper-V устанавливается так:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V –All

Для управления хостом Hyper-V на компьютере должен быть установлен модуль Hyper-V. Полный список команд в модуле (зависит от версии Windows) можно вывести так:

Get-Command -Module hyper-v

powershell модулья для управления hyper-v

В Windows Server 2022 в модуле Hyper-V доступно 245 командлетов.

Вывести полный список настроек хоста Hyper-V можно с помощью команды:

Get-VMHost|fl *

Чтобы вывести только информацию о количестве доступных ядер и RAM:

Get-VMHost| select LogicalProcessorCount, MemoryCapacity

Get-VMHost вывести настройки сервера Hyper-V

Чтобы изменить настройки хоста Hyper-V используется командлет Set-VMHost. Следующая команда изменит пути по-умолчанию для хранения виртуальных дисков и конфигурационных файлов ВМ:

Set-VMHost -VirtualMachinePath D:VM -VirtualHardDiskPath 'D:VMVHD'

Создаем виртуальный коммутатор Hyper-V с помощью PowerShell

Прежде всего на сервере Hyper-V нужно создать виртуальный коммутатор. Виртуальные машины смогут получать доступ к сети только через виртуальный коммутатор.

Выведем список доступных физических адаптеров на хосте Hyper-V:

Get-NetAdapter | where {$_.status -eq "up"}

Если ваш сервер поддерживает SR-IOV (Single-Root Input/Output (I/O) Virtualization), обратите внимание, что нужно включать эту опцию во время создания коммутатора. Включить SR-IOV для существующего vSwitch нельзя. Более подробно это описано в статье Включаем поддержку SR-IOV для виртуальных машин Hyper-V.

Создайте виртуальный внешний коммутатор:

New-VMSwitch -Name "ExtVMSwitch" -AllowManagementOS $True -NetAdapterName Ethernet0 -SwitchType External

создать виртуальный коммутотор New-VMSwitch

Создание и изменение настроек виртуальной машины Hyper-V с помощью PowerShell

Для создания новой виртуальной машины используется командлет New-VM. В этом примере мы создадим новую ВМ второго поколения с 1 ГБ RAM и vhdx диском размером 5 Гб.

$VMName = "spb-dmz2"
$VM = @{
Name = $VMName
MemoryStartupBytes = 1Gb
Generation = 2
NewVHDPath = "C:HV$VMName$VMName.vhdx"
NewVHDSizeBytes = 5Gb
BootDevice = "VHD"
Path = "C:HV$VMName"
SwitchName = "ExtVMSwitch"
}
New-VM @VM

New-VM создать виртуальную машину на hyper-v с помощью powershell

Рассмотрим команды, которые можно использовать для изменения настроек виртуальных машин.

Увеличить размер RAM для ВМ:

Get-VM -Name spb-dmz1| Set-VMMemory -StartupBytes 2Gb

Изменить количество vCPU:

Set-VMProcessor spb-dmz1 -Count 2

Разрешить автозапуск для виртуальной машину Hyper-V:

Get-VM –VMname spb-dmz1 | Set-VM –AutomaticStartAction Start

Чтобы подключить дополнительный виртуальный диск в ВМ, нужно сначала создать его:

New-VHD -Path 'C:VMtest1.vhdx' -SizeBytes 2GB

А затем подключить к ВМ:

Add-VMHardDiskDrive -VMName spb-dmz1 -Path 'C:VMtest1.vhdx'

Используем PowerShell для управления виртуальными машинами Hyper-V

Вывести список виртуальных машин на хосте Hyper-V:

Get-VM

Get-VM вывести список ВМ на хосте Hyper-V

Команда вернула список ВМ с несколькими базовыми характеристиками. Чтобы вывести все свойства ВМ, выполните:

Get-VM -Name spb-dmz1 | fl *

Вывести только включенные ВМ:

Get-VM | where {$_.State -eq 'Running'}

Запустить виртуальную машину:

Start-VM -Name spb-app01

Запустить все выключенные виртуальные машины:

Get-VM | where {$_.State -eq 'Off'} | Start-VM

Выключить ВМ (корректное выключение через гостевую ОС):

Stop-VM -Name spb-app01

Чтобы выключить ВМ по питанию используется ключ TurnOff:

Stop-VM -Name spb-app01 –TurnOff

Зависшие ВМ можно выключить так.

Подключить ISO файл в виртуальное CD/DVD устройство:

Set-VMDvdDrive -VMName spb-app01 -Path c:isoWinSrv2022.iso

Чтобы перенести все файлы ВМ на лету на другой диск, используйте команду:

Move-VMStorage spb-app01 -DestinationStoragePath D:VMspb-app01

Увеличить или сжать виртуальный диск можно с помощью команды Resize-VHD:

Resize-VHD -Path 'C:VMfs01.vhdx' -SizeBytes 50Gb

Создать чекпоинт (снапшот) указанной ВМ:

Get-VM -Name spb-app01| Checkpoint-VM -SnapshotName "before install patch"

Вывести список доступных чекпоинтов:

управление снапшотами виртуальных машин hyper-v Checkpoint-VM

Вернуть состояние ВМ из предыдущему чекпоинту:

Restore-VMCheckpoint -Name "before install patch" -VMName spb-app01 -Confirm:$false

Удалить снапшот:

Remove-VMCheckpoint -VMName spb-app01 -Name "before install patch"

Экспорт, импорт и клонирование ВМ описаны подробно в статье по ссылке:

Export-VM -Name spb-app01 -Path 'C:VHDexport' -CaptureLiveState CaptureCrashConsistentState

Получить IP адреса гостевых ОС виртуальных машин:

Get-VM | Select -ExpandProperty NetworkAdapters | Select VMName, IPAddresses, Status

Подключиться к консоли определенной виртуальной машины:

vmconnect.exe localhost spb-app01

vmconnect.exe утилита для подключения к консоли виртуальных машин hyper-v

Для подключения PowerShell сессией напрямую к гостевым ОС виртуальных машин через шину vmbus можно использовать PowerShell Direct (доступен для гостевых ОС Windows Server 2016, Windows 10 и новее). Можно использовать командлеты Invoke-Command (для запуска скриптов) и Enter-PSSession (для входа в интерактивную PowerShell сессию):

Invoke-Command -VMName spb-app01 -ScriptBlock {Get-Process}
Enter-PSSession -VMName spb-app01

Для копирования файлов с хоста Hyper-V в виртуальную машину через PowerShell Direct используйте:

$PSSession1 = New-PSSession --VMName spb-app01 -Credential (Get-Credential)
Copy-Item -ToSession $PSSession1 -Path C:isowin10.iso -Destination D:ISO

Вы можете использовать PowerShell для локального или удаленного управления виртуальными машинами на хостах Hyper-V (как на Windows Server в режимах Full GUI или Core, так и на Free Windows Hyper-V Server, или Windows 10) как отдельно, так и в дополнении к графическим средствам управления Hyper-V Manager и Windows Admin Center.

PowerShell
Управление виртуальными машинами Hyper-V с помощью PowerShell