Hyper-V. Часть 7: Управляем Hyper-V с рабочей станции
Все части серии «Hyper-V»Во всех предыдущих частях команды выполнялись на самом хосте. В работе так не делают: заходить на хост по RDP ради каждой машины не нужно, а на хосте с Server Core и негде открыть окно консоли. Разберём, как управлять Hyper-V с рабочей станции администратора: какие средства на неё поставить и какие права выдать, как подключиться к хосту в домене и вне домена, как открыть консоль машины и как выполнять команды внутри гостя без его сети.
Средства управления
Hyper-V Manager и модуль PowerShell есть в Windows 10 и 11 редакций Pro и Enterprise; в Home компонента Hyper-V нет (Hyper-V в Windows). Сам гипервизор на рабочей станции ставить не обязательно — достаточно средств управления (удалённое управление хостами):
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All
Get-WindowsOptionalFeature -Online -FeatureName 'Microsoft-Hyper-V-Management*' | Format-Table FeatureName, State
Microsoft-Hyper-V-Tools-All включает два компонента: Microsoft-Hyper-V-Management-Clients — Hyper-V Manager (virtmgmt.msc) и окно подключения к машине vmconnect.exe, и Microsoft-Hyper-V-Management-PowerShell — модуль Hyper-V. В окне «Компоненты Windows» это пункт «Средства управления Hyper-V».
На другом Windows Server, с которого вы управляете хостами, те же средства без самой роли ставит Install-WindowsFeature RSAT-Hyper-V-Tools (установка роли). Модуль кластеров, который понадобится в частях о сборке и обслуживании кластера, — RSAT-Clustering-PowerShell на сервере или компонент Rsat.FailoverCluster.Management.Tools на Windows 10/11:
Add-WindowsCapability -Online -Name 'Rsat.FailoverCluster.Management.Tools~~~~0.0.1.0'
Права на хосте
Пользователь должен входить в локальную группу Administrators или Hyper-V Administrators на хосте. Вторая даёт полный доступ к Hyper-V, но не к остальной системе (встроенные группы), поэтому администраторов виртуализации добавляют в неё:
Invoke-Command -ComputerName hv1, hv2 { Add-LocalGroupMember -Group 'Hyper-V Administrators' -Member 'CORP\hv-admins' }
Invoke-Command -ComputerName hv1, hv2 { Get-LocalGroupMember -Group 'Hyper-V Administrators' }
Членство в Hyper-V Administrators не даёт прав на файлы: если машине нужен диск из папки, к которой у пользователя нет доступа, Add-VMHardDiskDrive откажет. Папки Hyper-V на хосте обычно настраивают так, чтобы группа имела к ним полный доступ.
Хост в том же домене
Если рабочая станция и хост в одном домене, вход проходит по Kerberos и ничего настраивать не нужно, кроме включённого на хосте удалённого управления (Enable-PSRemoting; на Windows Server оно включено по умолчанию). Командлеты модуля Hyper-V принимают -ComputerName и ходят на хост через WMI — это порт TCP 135 и динамический порт из диапазона 49152–65535 (порты служб Windows):
Get-VM -ComputerName hv1, hv2 | Format-Table ComputerName, Name, State, Uptime
Start-VM -ComputerName hv1 -Name app1
virtmgmt.msc # Hyper-V Manager, «Подключиться к серверу» → hv1
Удобнее один раз открыть CIM-сеанс и передавать его всем командам — так не нужно повторять подключение для каждой:
$hv = New-CimSession -ComputerName hv1, hv2
Get-VM -CimSession $hv | Format-Table ComputerName, Name, State
Get-VMSwitch -CimSession $hv | Format-Table ComputerName, Name, SwitchType
Всё, что выходит за рамки модуля Hyper-V, — модули Storage и NetAdapter, файлы, службы — удобнее выполнять на самом хосте через PowerShell Remoting (WinRM, TCP 5985):
Invoke-Command -ComputerName hv1 { Get-Volume | Format-Table DriveLetter, FileSystemLabel, SizeRemaining, Size }
Enter-PSSession -ComputerName hv1
Если ваша учётная запись не администратор хоста, Hyper-V Manager умеет подключаться от имени другого пользователя («Подключиться как другой пользователь»), а в PowerShell есть -Credential: Enter-PSSession -ComputerName hv1 -Credential CORP\hv-admin.
Хост вне домена
Хост в рабочей группе (или в чужом домене без доверия) Hyper-V Manager подключает через CredSSP. Настройка — по документации (удалённое управление хостами). На хосте:
Enable-PSRemoting
Enable-WSManCredSSP -Role Server
На рабочей станции:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 'hv9.example.net' -Concatenate
Enable-WSManCredSSP -Role Client -DelegateComputer 'hv9.example.net'
Иногда нужна ещё групповая политика «Конфигурация компьютера → Административные шаблоны → Система → Передача учётных данных → Разрешить передачу новых учётных данных с проверкой подлинности сервера только NTLM» со значением wsman/hv9.example.net. Учётные данные при подключении — локальной учётной записи хоста: hv9\Administrator.
$cred = Get-Credential 'hv9\Administrator'
Get-VM -ComputerName hv9.example.net -Credential $cred
Консоль машины: vmconnect
Чтобы увидеть экран машины — установку ОС, загрузчик, синий экран, машину без сети, — нужна консоль. Её открывает vmconnect.exe — то же окно, которое мы открывали в первой части на самом хосте:
vmconnect.exe hv1 app1
По сети соединение идёт только до хоста: картинку экрана машины отдаёт служба VMMS, она слушает TCP 2179 (порты служб Windows). Поэтому консоль работает, даже если у гостя нет ни сети, ни включённого RDP. Проверить на хосте:
Invoke-Command -ComputerName hv1 { Get-NetTCPConnection -LocalPort 2179 -State Listen }
У консоли два режима. Базовый показывает экран и передаёт клавиатуру и мышь — как монитор, подключённый к машине. Расширенный сеанс (enhanced session) — это RDP, который идёт не по сети, а по VMBus: с ним работают буфер обмена и копирование файлов, перенаправление локальных дисков, принтеров, звука, USB-устройств и смарт-карт, а окно меняет разрешение экрана гостя (локальные ресурсы в VMConnect). Условия:
- на хосте включена настройка расширенного сеанса —
Set-VMHost -EnableEnhancedSessionMode $true, по умолчанию на Windows Server она выключена (Set-VMHost); - vmconnect запущен на Windows 10, Windows Server 2016 или более новой системе;
- в госте Windows 10 или Windows Server 2016 и новее с включёнными службами удалённых рабочих столов.
Set-VMHost -ComputerName hv1 -EnableEnhancedSessionMode $true
vmconnect.exe hv1 app1 /edit # открыть настройки сеанса: разрешение, диски, устройства
Для Ubuntu и других Linux расширенный сеанс настраивается отдельно, внутри гостя (там же).
Консоль — инструмент для случаев, когда к машине иначе не подключиться. Для повседневной работы к гостю подключаются как к любому серверу — по RDP, WinRM или SSH по сети: так не нужны права администратора Hyper-V на хосте, а сессия не зависит от того, на каком узле кластера сейчас машина.
PowerShell Direct
С хоста можно выполнять команды внутри гостя без сети и без настроенного WinRM — канал идёт по VMBus. Это PowerShell Direct, которым мы уже пользовались в частях о дисках и сети: нужны хост и гость не старше Windows Server 2016 (или Windows 10) и учётные данные гостя (PowerShell Direct).
$cred = Get-Credential 'app1\Administrator'
Invoke-Command -VMName app1 -Credential $cred -ScriptBlock { Get-NetIPAddress -AddressFamily IPv4 }
Enter-PSSession -VMName app1 -Credential $cred
$s = New-PSSession -VMName app1 -Credential $cred
Copy-Item -ToSession $s -Path 'D:\dist\agent.msi' -Destination 'C:\Temp\'
Этим спасают машины с неправильно настроенной сетью или брандмауэром: зайти в них по сети нельзя, а по VMBus — можно. Машина должна быть запущена и находиться на том же хосте, где выполняется команда; учётные данные проверяет сам гость, поэтому членство в Hyper-V Administrators на хосте не даёт доступа внутрь машины.
PowerShell Direct работает только локально на хосте, поэтому с рабочей станции его вызывают изнутри сессии на хосте, а учётные данные гостя передают через $using::
$cred = Get-Credential 'app1\Administrator'
Invoke-Command -ComputerName hv1 {
Invoke-Command -VMName app1 -Credential $using:cred { Get-Service W32Time }
}
Смотрим руками
Все машины на всех хостах одной таблицей — с рабочей станции:
$hv = New-CimSession -ComputerName hv1, hv2
Get-VM -CimSession $hv | Sort-Object ComputerName, Name |
Format-Table ComputerName, Name, State, Uptime, @{n='MemGB'; e={[math]::Round($_.MemoryAssigned/1GB, 1)}}
Проверить, что с рабочей станции открываются все нужные порты хоста:
foreach ($p in 135, 5985, 2179) {
Test-NetConnection -ComputerName hv1 -Port $p | Select-Object ComputerName, RemotePort, TcpTestSucceeded
}
Источники
- Install Hyper-V on Windows и Install the Hyper-V role on Windows Server — редакции Windows, средства управления;
- Remotely manage Hyper-V hosts with Hyper-V Manager — подключение к хосту в домене и вне домена;
- Active Directory security groups — группа Hyper-V Administrators;
- Service overview and network port requirements for Windows — порты WMI, WinRM и VMConnect;
- Use local resources on Hyper-V virtual machine with VMConnect — базовый и расширенный сеанс;
- Set-VMHost — включение расширенного сеанса на хосте;
- Manage Windows virtual machines with PowerShell Direct — требования и сеансы PowerShell Direct.
Рабочей станции администратора хватает средств управления и членства в Hyper-V Administrators: модуль ходит на хосты по WMI, консоль машин — к VMMS на порт 2179, а внутрь гостя без сети ведёт PowerShell Direct.
Дальше — часть 8: переносим виртуальные машины между хостами. Экспорт и импорт, живая миграция без кластера и её аутентификация, перенос хранилища на работающей машине, совместимость процессоров, обновление версии конфигурации после переезда и Hyper-V Replica для аварийного переключения.
Оставить комментарий могут только зарегистрированные пользователи.
Войдите на сайт или зарегистрируйтесь, чтобы оставить комментарий.