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

Выше уже подробно описывались два средства управления серверами Hyper-V и виртуальными машинами: оснастка диспетчера Hyper-V и средство подключения к виртуальной машине. Эти средства можно установить на любой компьютер Windows Server 2008 R2, а также использовать на компьютерах Windows 7 при установке средств RSAT для Windows 7. Помимо этого существуют и другие способы удаленного управления серверами и виртуальными машинами Hyper-V, в том числе:

  • Подключение к удаленному рабочему столу
  • RemoteApp
  • Инструментарий управления Windows (WMI)
  • Windows PowerShell
  • System Center Virtual Machine Manager 2008 R2

System Center Virtual Machine Manager 2008 R2 подробно описывается в главе 5, поэтому в следующих разделах мы рассмотрим другие перечисленные средства.

Управление Hyper-V с помощью подключения к удаленному рабочему столу

Вместо подключения к удаленному серверу Hyper-V с помощью оснастки диспетчера Hyper-V можно использовать подключение к удаленному рабочему столу удаленного сервера (средство Mstsc.exe), а затем запустить консоль диспетчера Hyper-V локально на сервере. Для этого необходимо просто включить удаленный рабочий стол на удаленном сервере Hyper-V.

При этом такой подход к управлению Hyper-V имеет определенные недостатки:

  • Если сервер Hyper-V работает под управлением версии Windows Server 2008 R2 Server Core, то оснастка диспетчера Hyper-V и средство подключения к виртуальной машине недоступны локально, поэтому управление таким способом будет невозможным.
  • Если в ходе подключения к удаленному рабочему столу сервера Hyper-V открывается средство подключения к виртуальной машине, то могут возникнуть следующие проблемы:
    • Если службы интеграции не установлены, то в виртуальной машине будет отсутствовать возможность управления мышью. Очевидным решением этой проблемы является установка служб интеграции на виртуальных машинах.
    • Некоторые сочетания клавиш (например, CTRL+ALT+DEL) могут вызывать неожиданные действия, если в сеансе удаленного рабочего стола запущено средство подключения к виртуальной машине. Это связано с тем, что подключение к удаленному рабочему столу перехватывает эти сочетания до их передачи в подключение. Чтобы устранить эту проблему, разрешите передачу сочетаний клавиш Windows в виртуальную машину: например, измените в параметрах сервера Hyper-V сочетание клавиш переключения CTRL+ALT+СТРЕЛКА ВЛЕВО и используйте кнопки панели инструментов или меню подключения к виртуальной машине «Действие» для отправки сочетания CTRL+ALT+DEL.

Управление Hyper-V с помощью RemoteApp

Чтобы управлять серверами Hyper-V с компьютера под управлением более ранней версии Microsoft Windows (например, Windows XP Professional), используйте RemoteApp для публикации приложения диспетчера Hyper-V на сервере Hyper-V с помощью служб удаленного рабочего стола. Для этого используется следующая процедура:

  1. Установите роль служб удаленного рабочего стола на сервере под управлением версии Windows Server 2008 R2 Full. Следует включить роль веб-доступа к удаленному рабочему столу в установку роли.
  2. Установите средства управления ролью Hyper-V или ролью Hyper-V.
  3. Настройте членство групп и пользователей для групп безопасности «Пользователь удаленного рабочего стола» и «Компьютеры веб-доступа к удаленному рабочему столу». Кроме того, настройте протокол RDP и параметры безопасности.
  4. Запустите мастер RemoteApp из диспетчера RemoteApp и добавьте консоль диспетчера Hyper-V (Virtmgmt.msc) в список опубликованных приложений на сервере.

Перейдите на компьютер под управлением более ранней версии ОС Windows, подключитесь к серверу с помощью веб-доступа к удаленному рабочему столу, выберите удаленно опубликованное приложение (диспетчер Hyper-V), чтобы запустить экран подключения, а затем пройдите проверку подлинности на сервере. После этого консоль диспетчера Hyper-V будет запущена на локальном компьютере. Она будет выглядеть и функционировать точно так же, как если бы она была установлена локально. Единственное отличие заключается в отображении слова Удаленный в названии окна. Это указывает на то, что это приложение RemoteApp, а не локальная программа.

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

Hyper-V также содержит поставщик инструментария управления Windows (WMI), который позволяет разработчикам создавать настраиваемые средства, инструменты и скрипты для управления всеми аспектами платформы Hyper-V. Этот поставщик WMI предоставляет классы WMI для следующих типов функций:

  • BIOS
  • Входные данные
  • Компоненты интеграции
  • Память
  • Сеть
  • Процессор
  • Регистрация профиля
  • Управление ресурсами
  • Последовательные устройства
  • Хранилище
  • Видео
  • Виртуальная система
  • Управление виртуальной системой

Например, в состав классов BIOS входит класс Msvm_BIOSElement, который представляет виртуальное ПО BIOS, которое загружается в память для настройки и запуска системы, а также класс Msvm_SystemBIOS, используемый для связи виртуальной системы с BIOS. Класс Msvm_BIOSElement предоставляет свойства BaseBoardSerialNumber, BIOSGUID, BIOSNumLock, BootOrder и т. д. Некоторые свойства доступны только для чтения, а некоторые — для чтения и записи.

Дополнительные сведения Для получения дополнительных сведений о поставщике Hyper-V WMI обратитесь к статье библиотеки MSDN по адресу
https://msdn.microsoft.com/en-us/library/cc136992.aspx.

Управление Hyper-V с помощью Windows PowerShell

Для управления большинством аспектов платформы Hyper-V также можно использовать Windows PowerShell. Windows PowerShell — это оболочка командной строки и скриптовый язык, который позволяет администраторам контролировать и автоматизировать задачи управления системой. Windows PowerShell содержит различные средства управления системой, имеет единый синтаксис и соглашения об именовании, а также обеспечивает доступ к стандартным данным управления (например, к реестру Windows, хранилищу сертификатов и пространствам имен WMI). Windows PowerShell также содержит интуитивно понятный язык скриптов, разработанный специально для управления Windows.

В версии 2.0 Windows PowerShell, включенной в состав Windows Server 2008 R2 и Windows 7, представлено множество дополнительных функций и улучшений, в том числе:

  • Поддержка удаленного доступа Позволяет запускать удаленные команды на одном или нескольких компьютерах с помощью одной команды Windows PowerShell.
  • Поддержка фоновых заданий Использует удаленный доступ и позволяет выполнять локальные и удаленные команды в фоновом режиме в ходе применения консоли Windows PowerShell для осуществления других действий. При необходимости можно получить результаты выполнения заданий.
  • Поддержка командлетов Позволяет создавать командлеты Windows PowerShell на языке Windows PowerShell, а не на языке C#.
  • Интегрированная среда сценариев (ISE) Новый графический пользовательский интерфейс для Windows PowerShell, в состав которого входит интерфейс скриптов с расцветкой синтаксиса и выборочным выполнением.
  • Командлеты отладчика Windows PowerShell Эти командлеты позволяют устанавливать точки останова, пошагово выполнять скрипт или функцию, а также отображать содержимое стека вызовов.
  • Интернационализация скриптов Позволяет отображать пользовательские сообщения и текст справки на языке пользователя.
  • Разделы данных Особый раздел скрипта или функции, в котором можно изолировать данные от логики скрипта, не смешивая данные с логикой. Разделы данных также позволяют группировать строки файлов ресурсов.
  • Out-GridView Командлет, позволяющий создавать интерактивные метки из выходных данных команд, чтобы управлять данными с помощью мыши или клавиатуры.
  • Новые и улучшенные командлеты WMI, в т. ч. Remove-WmiObject, Set-WmiInstance и Invoke-WmiMethod. Кроме того, все командлеты WMI теперь также поддерживают параметр EnableAllPrivileges, а также параметры Impersonation, Authentication и Authority.
  • Улучшенные разделы справки В справку для различных командлетов добавлено много новых примеров.

Дополнительные сведения Дополнительные сведения о Windows PowerShell см. в блоге Windows PowerShell по адресу https://blogs.msdn.com/PowerShell/. Кроме того, полезные обучающие ресурсы по Windows PowerShell можно найти в разделе Script Center сайта Microsoft TechNet по адресу https://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx.

Постоянно пополняющаяся библиотека по управлению Windows PowerShell для Hyper-V находится на сайте CodePlex Project по адресу https://www.codeplex.com/PSHyperv. CodePlex — это сайт корпорации Майкрософт для размещения проектов с открытым исходным кодом. С его помощью разработчики могут начать новый проект, присоединиться к разработке существующего проекта или загрузить ПО, созданное сообществом CodePlex. Обратите внимание на то, что сайт CodePlex предоставляется сообществу разработчиков корпорацией Майкрософт только как средство хранения и обслуживания. Корпорация Майкрософт не контролирует, не оценивает, не просматривает и не распространяет сторонние проекты, размещенные на этом сайте. Дополнительные сведения о проекте CodePlex см. в условиях его использования по адресу  https://www.codeplex.com/Legal/Terms.aspx.

На момент написания этого раздела в библиотеке CodePlex Windows PowerShell для Hyper-V описано 80 функций Windows PowerShell, которые можно использовать для выполнения задач управления Hyper-V  (например, поиск виртуальной машины, подключение к ней, обнаружение и изменение состояния, резервное копирование и экспорт виртуальной машины, а также создание моментального снимка и другие часто выполняемые задачи). В таблице 2-6 перечислены командлеты, доступные для различных категорий задач управления Hyper-V.

Таблица2-6. Windows PowerShell на сайте CodePlex

Тип задачи управления Имеющиеся командлеты
Поиск ВМ Get-VM
  Choose-VM
  Get-VMHost
Подключение к ВМ New-VMConnectSession
Обнаружение состояний ВМ и управление ими Get-VMState
  Set-VMState
  Convert-VMState
  Ping-VM
  Test-VMHeartBeat
  Shutdown-VM
  Start-VM
  Stop-VM
  Suspend-VM
  Get-VMKVP
  Add-KVP
  Remove-KVP
  Get-VMJPEG
Резервное копирование, экспорт и создание снимков ВМ Export-VM
  Import-VM
  Get-VMSnapshot
  Choose-VMSnapshot
  Apply-VMSnapshot
  New-VMSnapshot
  Remove-VMSnapshot
  Rename-VMSnapshot
  Update-VMSnapshot
  Get-VMSnapshotTree
  Get-VMBackupScript
Добавление и удаление ВМ, настройка параметров материнской платы New-VM
  Remove-VM
  Set-VM
  Get-VMCPUCount
  Set-VMCPUCount
  Get-VMMemory
  Set-VMMemory
  Set-VMSerialPort
Управление контроллерами дисков, дисками и образами Get-VMDiskController
  Add-VMSCSIController
  Remove-VMSCSIController
  Get-VMDriveByController
  Add-VMDRIVE
  Remove-VMdrive
  Get-VMDiskByDrive
  Add-VMDisk
  Set-VMDisk
  Get-VMDisk
  Get-VMFloppyDisk
  Add-VMFloppyDisk
  Add-VMNewHardDisk
Управление сетевыми интерфейсами Get-VMNic
  List-VMNic
  Choose-VMNIC
  Add-VMNIC
  Remove-VMNIC
  Set-VMNICAddress
  Set-VMNICConnection
  Get-VMNicPort
  Get-VMnicSwitch
  Choose-VMSwitch
  New-VMSwitchPort
  Get-VMByMACaddress
  Choose-VMExternalEthernet,
  New-VMExternalSwitch
  New-VMInternalSwitch
  New-VMPrivateSwitch
Работа с VHD-файлами Get-VHDDefaultPath
  Get-VHDInfo
  New-VHD
  Compact-VHD
  Test-VHD
  Convert-VHD
  Merge-VHD
  Mount-VHD
  Unmount-VHD

Совет Так как вариант установки Server Core Windows Server 2008 R2 теперь дополнительно содержит Windows PowerShell, то эти командлеты Windows PowerShell можно использовать для удаленного управления виртуальными машинами на серверах Server Core Hyper-V.

Из первых уст: управление Hyper-V с помощью Windows PowerShell

Hyper-V предоставляет оснастку MMC, которая может использоваться для удаленного управления. При этом средства для управления из командной строки отсутствуют. К счастью, MMC задействует набор интерфейсов WMI, которые задокументированы на сайте MSDN, что позволяет разрабатывать средства на любом языке с поддержкой WMI.

Windows PowerShell имеет встроенную поддержку WMI за счет командлета Get-WmiObject.После получения объекта командлетом все его свойства и методы становятся доступными скрипту Windows PowerShell. Для операций Hyper-V необходимо создавать скрипты, а Windows PowerShell позиционируется корпорацией Майкрософт как передовое средство создания скриптов, поэтому рекомендуется ознакомиться со сведениями о разработке библиотеки функций Windows PowerShell, доступными в хранилище Microsoft CodePlex Open Source по адресу https://www.codePlex.com/PSHyperV. Представлен широкий диапазон функций — от самых простых команд (Get-VM, принимающая имя и возвращающая соответствующий объект WMI  MSVM_VirtualMachine в необработанном состоянии) докомплексных средств изменения конфигурации виртуальных машин и соответствующих виртуальных жестких дисков. Во всех этих функциях используется набор уже известных приемов Windows PowerShell. Например, ниже представлена базовая форма GET-VM:

Function Get-VM

{Param (SmachineName, $Server=".")

$WQL="Se1ect * From MsVM_ComputerSystem Where ElementName Like 'SmachineName' AND Caption Like 'Virtua1%' "

Get-WmiObject -computername SServer -NameSpace "root\virtua1ization" -Query SWQL

Как следует из кода, функция имеет два параметра. Параметр Server по умолчанию равен локальной машине (".").  После этого имя компьютера по умолчанию было приравнено подстановочному символу (знаку % в языке запросов WMI). Так как использовалось имя Name*, то был добавлен код, заменяющий * на %, а также переключатели, изменяющие запрос  WQL для возврата имен только работающих машин. Теперь команда выглядит следующим образом:

Get-VM -Server "HV-Core"-Running | suspend-VM

Объект  MSVM_ComputerSystem имеет метод запроса изменения состояния, поэтому команда suspend-VM вызывает его с запросом изменения состояния на «Приостановлено». Для изменения параметров виртуальной машины потребуются дополнительные усилия. В этом случае необходимо вызвать метод изменения виртуальных ресурсов системы объекта WMI  MSVM_VirtualSystemManagementService.

Необходимо передать имя машины, блок XML-кода и переменную  Null, в которую будет записан результат.Создание XML-кода обычно подразумевает получение объекта WMI, описывающего изменяемый объект, с последующим вызовом метода getText и запросом текста XML, например:

Function Set-VMMemory

{Param ($VM , Smemory, $server=".")

if (SVM -is [String]) {$VM=(Get-VM -Machinename SVM -Server SServer) }

SmemSettingData=Get-WmiObject -computerName Svm.   server NameSpace

"root\virtua1ization" Query "select * from Msvm_MemorySettingData where instanceld Like 'Microsoft:S(Svm.name)%' "

SmemsettingData.Limit  =$Memory / 1MB

SmemsettingData.Reservation =SMemory / 1MB

SmemsettingData.VirtualQuantity =$Memory / 1MB

Sarguments=@(SVM.      Path, @(SmemsettingData.psbase.GetText([System.Management.

TextFormat]::WmiDtd20)) , Snull)

SVSMgtSvc = (Get-WmiObject -computerName Svm.      server -NameSpace

"root\virtua1ization" -Class "MsVM_virtua1SystemManagementService")

Sresu1t=SVSMgtSvc.psbase.invokeMethod("ModifyVirtua1SystemResources",Sarguments)

if (Sresult -eq 0) {"Set memory for 'S(Svm.elementName)' to Smemory."} else {"Failed to set memory for 'S(Svm.elementName)', result code: Sresult."} }

}

Используйте эти приемы и документацию по поставщику WMI с сайта MSDN (и не забывайте про примеры с сайта CodePlex) для составления собственных скриптов, выполняющих любые задачи.

— Джеймс О'Нил, ведущий специалист по информационным технологиям, Майкрософт, Великобритания