Как удалить виртуальный коммутатор hyper v через powershell
Настройка сети в Hyper-V с помощью Powershell может являться достаточно распространенным сценарием, ведь во многих случаях хост Hyper-V представляет из себя систему с интерфейсом Server Core . Факт однообразия конфигурации хостов виртуализации только способствует такому подходу.
В статье вы увидите пример решений одной из задач администрирования реальной инфраструктуры в продакшене.
Если вам интересна тематика Windows Server, рекомендую обратиться к тегу Windows Server на моем блоге.
Настройка сети в 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
В Windows Server 2022 в модуле Hyper-V доступно 245 командлетов.
Вывести полный список настроек хоста Hyper-V можно с помощью команды:
Чтобы вывести только информацию о количестве доступных ядер и RAM:
Get-VMHost| select LogicalProcessorCount, MemoryCapacity
Чтобы изменить настройки хоста Hyper-V используется командлет Set-VMHost. Следующая команда изменит пути по-умолчанию для хранения виртуальных дисков и конфигурационных файлов ВМ:
Set-VMHost -VirtualMachinePath D:\VM -VirtualHardDiskPath 'D:\VM\VHD'
Создаем виртуальный коммутатор Hyper-V с помощью PowerShell
Прежде всего на сервере Hyper-V нужно создать виртуальный коммутатор. Виртуальные машины смогут получать доступ к сети только через виртуальный коммутатор.
Выведем список доступных физических адаптеров на хосте Hyper-V:
Если ваш сервер поддерживает 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
Создание и изменение настроек виртуальной машины 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
Рассмотрим команды, которые можно использовать для изменения настроек виртуальных машин.
Увеличить размер RAM для ВМ:
Get-VM -Name spb-dmz1| Set-VMMemory -StartupBytes 2Gb
Set-VMProcessor spb-dmz1 -Count 2
Get-VM –VMname spb-dmz1 | Set-VM –AutomaticStartAction Start
Чтобы подключить дополнительный виртуальный диск в ВМ, нужно сначала создать его:
New-VHD -Path 'C:\VM\test1.vhdx' -SizeBytes 2GB
А затем подключить к ВМ:
Add-VMHardDiskDrive -VMName spb-dmz1 -Path 'C:\VM\test1.vhdx'
Используем PowerShell для управления виртуальными машинами Hyper-V
Вывести список виртуальных машин на хосте Hyper-V:
Команда вернула список ВМ с несколькими базовыми характеристиками. Чтобы вывести все свойства ВМ, выполните:
Get-VM -Name spb-dmz1 | fl *
Вывести только включенные ВМ:
Запустить виртуальную машину:
Start-VM -Name spb-app01
Запустить все выключенные виртуальные машины:
Выключить ВМ (корректное выключение через гостевую ОС):
Stop-VM -Name spb-app01
Чтобы выключить ВМ по питанию используется ключ TurnOff:
Stop-VM -Name spb-app01 –TurnOff
Подключить ISO файл в виртуальное CD/DVD устройство:
Set-VMDvdDrive -VMName spb-app01 -Path c:\iso\WinSrv2022.iso
Прямой проброс USB диска с хоста Hyper-V в виртуальную машину описан в статьеЧтобы перенести все файлы ВМ на лету на другой диск, используйте команду:
Move-VMStorage spb-app01 -DestinationStoragePath D:\VM\spb-app01
Resize-VHD -Path 'C:\VM\fs01.vhdx' -SizeBytes 50Gb
Создать чекпоинт (снапшот) указанной ВМ:
Get-VM -Name spb-app01| Checkpoint-VM -SnapshotName "before install patch"
Вывести список доступных чекпоинтов:
Вернуть состояние ВМ из предыдущему чекпоинту:
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:\VHD\export' -CaptureLiveState CaptureCrashConsistentState
Для резервного копирования виртуальных машин Hyper-V можно использовать встроенный Windows Server Backup.Получить IP адреса гостевых ОС виртуальных машин:
Get-VM | Select -ExpandProperty NetworkAdapters | Select VMName, IPAddresses, Status
Подключиться к консоли определенной виртуальной машины:
vmconnect.exe localhost spb-app01
Для подключения PowerShell сессией напрямую к гостевым ОС виртуальных машин через шину vmbus можно использовать PowerShell Direct (доступен для гостевых ОС Windows Server 2016, Windows 10 и новее). Можно использовать командлеты Invoke-Command (для запуска скриптов) и Enter-PSSession (для входа в интерактивную PowerShell сессию):
Invoke-Command -VMName spb-app01 -ScriptBlock
Enter-PSSession -VMName spb-app01
Для копирования файлов с хоста Hyper-V в виртуальную машину через PowerShell Direct используйте:
$PSSession1 = New-PSSession --VMName spb-app01 -Credential (Get-Credential)
Copy-Item -ToSession $PSSession1 -Path C:\iso\win10.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.
Попытка удалить в графическом интерфейсе не работает:
Аналогичная проблема была решена на форумах MicrosoftNet TechNet:
У нас есть виртуальная настройка коммутатора в диспетчере виртуальных коммутаторов, и адаптер был удален по ошибке с помощью «Изменить настройки адаптера . » в Центре управления сетями и общим доступом. Теперь, очевидно, что коммутатор находится в состоянии отказа, и мы просто хотим удалить его из списка.
В конечном итоге OP провела углубленный поиск в реестре и обнаружила конфигурацию виртуального коммутатора, хранящуюся в следующем ключе:
HKLM \ SYSTEM \ CurrentControlSet \ Services \ VMSMP \ Parameters \ SwitchList
После того, как они удалили соответствующее значение внутри этого ключа и перезагрузились, виртуальный коммутатор исчез.
Как всегда, я бы рекомендовал вам экспортировать ваши текущие настройки в файл .reg , чтобы иметь соответствующую резервную копию, прежде чем пытаться схожих изменений.
В основном вы переходите к Network Connections -> открыть свойства виртуального коммутатора, который вы хотите удалить -> нажмите «Настроить» -> перейдите на вкладку «Драйвер» -> Удалите устройство.
Чтобы служба Hyper-V не создавала новый, в следующий раз, когда я перезагружу свой компьютер, не отключив его, я изменил тип запуска каждого сервиса Hyper-V на «Руководство».
Это было протестировано в Windows 10 1607.
Короткий ответ, если вы используете Docker:
Длинный ответ:
Если вы столкнулись с этой ситуацией и включили контейнеры или установили Docker, вам необходимо остановить Docker, прежде чем вы сможете удалить VMSwitch.
Как вы можете видеть, у меня есть VMSwitch с именем nat . Я хочу, чтобы он ушел.
Ответ оказался довольно простым. Поскольку я сконфигурировал VMSwitch nat с NetNat, я удалил NetNat. Я не уверен, что это необходимый шаг, но я все равно сделал.
Затем я остановил Docker.
Чтобы убедиться, что его нет:
Даже если я не использую Docker, я хотел найти решение без использования regedit , поэтому после попытки ответ от RobV8R , я нашел инструкции по этот вопрос о MS Technet .
Или, для более фильтрованного optoin, это то, что мне нужно.
Кроме того, я собираюсь предположить, что вы захотите следовать советам @ mxgg250 и установить все сервисы hyper-v для ручного запуска, иначе он воссоздает перезагрузку.
Существует более простой способ устранить проблему на форумах MicrosoftNet TechNet:
Попробуйте удалить Адаптер моста от " Панель управления > Сеть и Интернет > Сетевые подключения "
Настройка сети в Hyper-V с помощью Powershell может являться достаточно распространенным сценарием, ведь во многих случаях хост Hyper-V представляет из себя систему с интерфейсом Server Core . Факт однообразия конфигурации хостов виртуализации только способствует такому подходу.
В статье вы увидите пример решений одной из задач администрирования реальной инфраструктуры в продакшене.
Если вам интересна тематика Windows Server, рекомендую обратиться к тегу Windows Server на моем блоге.
Настройка сети в Hyper-V с помощью Powershell
Окружение
Что было: парк серверов виртуализации, которые нужно перенастроить. Конфигурация типовая, на каждом сервере одна встроенная сетевая карта с двумя интерфейсами.
- Один интерфейс использовался для управления хостом;
- На втором интерфейсе висел единственный виртуальный коммутатор, через который ВМ выходили наружу.
То есть достучаться до хоста можно было по одному единственному адресу.
Что нужно было сделать: на базе двух интерфейсов создать тиминг-группу, на базе этой тиминг-группы создать внешний виртуальный коммутатор и подключить к нему все ВМ.
Если интересуют детали реализации на уровне сетевого оборудования, то конечно же каждый из двух сетевых интерфейсов сервера планировалось что будет смотреть в отдельный коммутатор. То есть была цель реализовать избыточность на уровне сетевого оборудования.
Примечание: внимательный читатель спросит зачем все это нужно, если избыточности на уровне сетевых карт сервера нету. Все верно, но хоть что-то. На моей памяти коммутаторы выходили из строя значительно чаще, чем сетевые карты на серверах, так что есть смысл обеспечить резервирование хотя бы на таком уровне .
Последовательность операций
Удаление старого виртуального коммутатора
Вы не сможете удалить виртуальный коммутатор, если к нему будут подключены ВМ. Отключаем все адаптеры всех ВМ одной командой:
Get - VM | Get - VMNetworkAdapter | Disconnect - VMNetworkAdapter
Напомню, что в моем окружении на каждом сервере был только один vSwitch.
Сохранение сетевых настроек
На каждом сервере был всего лишь один адаптер со статическими сетевыми настройками, а потому можно их легко запомнить, чтобы потом назначить тиминг-адаптеру.
$IpAddress = ( Get - NetIPAddress | Where - Object IPAddress - Like $NetworkPrefix | Select - Object - First 1 ) .IPAddress
$PrefixLength = ( Get - NetIPAddress | Where - Object IPAddress - Like $NetworkPrefix | Select - Object - First 1 ) .Prefixlength
Шлюз (пришлось погуглить, чтобы дойти до такой конструкции)
$DefaultGateway = ( Get - WmiObject - Class Win32_IP4RouteTable | where < $_ .destination - eq '0.0.0.0' - and $_ .mask - eq '0.0.0.0' >| Sort - Object metric1 | select - First 1 nexthop , metric1 , interfaceindex ) .nexthop
Создание тиминг-группы
New - NetLbfoTeam - Name $NicTeamName - TeamingMode SwitchIndependent - LoadBalancingAlgorithm HyperVPort - TeamMembers ( Get - NetAdapter - Physical ) .Name - Confirm : $False
Конструкция ( Get-NetAdapter -Physical ).Name возвращает список имен всех физических интерфейсов. Если ваша конфигурация отличается, вам стоит обратить внимание на этот момент.
Создание виртуального коммутатора
Тиминг-группа создана, можно на её основе создать виртуальный коммутатор:
New - VMSwitch - Name $VMSwitchName - NetAdapterName $NicTeamName - AllowManagementOS $true - Confirm : $False
Параметр -AllowManagementOS $true создаст виртуальный сетевой адаптер хоста.
Возвращение сетевых настроек
Тиминг-группа создана, виртуальный коммутатор на её основе тоже. После этого создался виртуальный сетевой адаптер хоста (имя по умолчанию vEthernet (External)), которому мы должны назначить ранее сохраненные сетевые настройки:
New - NetIPAddress - InterfaceAlias "vEthernet (External)" - IPAddress $IpAddress - PrefixLength $PrefixLength - DefaultGateway $DefaultGateway
Set - DnsClientServerAddress - InterfaceAlias "vEthernet (External)" - ServerAddresses $DnsServers
После завершения работы скрипта хост должен быть доступен по старому адресу.
Подключение адаптеров ВМ
Подключаем все адаптеры всех ВМ к единственному виртуальному коммутатору:
Get - VM | Get - VMNetworkAdapter | Connect - VMNetworkAdapter - VMSwitch ( Get - VMSwitch | Select - Object - First 1 )
Настройка VLAN виртуальных машин
Порты коммутаторов, к которым подключен сервер, должны быть выставлены в trunk-режим. Каждой виртуальной машине выставим идентификатор VLAN:
Get - VM | Get - VMNetworkAdapter | Set - VMNetworkAdapterVlan - VlanId $VMVlanId - Access
Примечание: такой подход более гибкий. Каждой виртуальной машине вы можете выставить произвольный идентификатор VLAN .
Команда PowerShell выше эквивалентна ручному выставлению VLAN ID в настройках сетевого адаптера виртуальной машины:
Настройка VLAN хоста
Установим идентификатор VLAN на виртуальном адаптере хоста:
Set - VMNetworkAdapterVlan - ManagementOS - Access - VlanId $HostVlanId
Команда PwerShell выше эквивалентна ручному выставлению VLAN ID в настройках виртуального коммутатора.
Примечание: Внимание! При изменении этих настроек вы можете потерять соединение с хостом .
На этом работа скрипта завершена, доступ к хосту и всем ВМ должен восстановиться.
Читайте также: