PowerShell+Hyper-V
Примерно так начинался мой разговор с другом которому в течение короткого промежутка времени пришлось несколько раз подряд экспортировать виртуальные машины из Hyper-V. Обычно для этого используется Hyper-V Manager (HVM), который устанавливается вместе с ролью Hyper-V под Windows Server 2008 R2. Я должен признаться что интерфейс этой программы не вызывает у меня каких-либо негативных эмоций. Среди всех программ для управления, которые Microsoft поставляет к Server эта мне кажется наиболее удобной и понятной (сравниваю например с IIS Manager, который вызывает недоумение у новых пользователей и бурное негодование у тех кто использовал IIS 6 в 2003 Server). Однако если нужно экспортировать или импортировать виртуальную машину в количестве N-штук в промежуток t-времени то используя Hyper-V Manager можно сломать кнопку у мыши и жутко возненавидеть Hyper-V. Тут на помощь и приходит PowerShell.
Import-Module HyperV
… И по умолчанию такого модуля в PowerShell конечно нет. Microsoft решила что писать командлеты для управления Hyper-V ни кто не будет (действительно дикая затея). С другой стороны этот мир полон людей умеющих и готовых упрощать жизнь себе и другим пользователям. Так на свет и появился PowerShell management Library for Hyper-V.
Первое что нужно сделать- это скачать этот модуль + документация, по вкусу. (Оба доступны по:http://pshyperv.codeplex.com/releases)
Потом необходимо этот модуль установить. Процесс не сложный (запускаемый файл install выдает себя с головой).
Теперь можно работать. Запускаем PowerShell, импортируем модуль (то что написано в подзаголовке).
И нам доступны все функции которые мы могли использовать через HVM, вот некоторые из них:
Подключение к виртуальной машине
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
Все приведенные команды говорят сами за себя.
Например чтобы получить состояние виртуальной машины достаточно ввести:
List-VMState имя вирт. машины
и в результате:
В моем примере всего одна виртуальная машина => я не указывал параметров, но если у вас их много, то наверное следует явно указать ее имя, если не хочется потом пробираться сквозь консольный вывод.
Так же просто например узнать об используемых сетевых интерфейсах для виртуальных машин, достаточно лишь ввести:
Get-VMNic
и получаем:
Ну и самое, то что и было необходимо моему другу- возможность делать экспорт в фоне, по расписанию. Для этого можно написать командлет который потом запихнуть в Scheduler. У меня например этот командлет останавливает виртуальную машину, делает ее экспорт, запускает снова и посылает мне письмо об ошибке или успехе выполнения командлета. После этого управление передается другому скрипту который архивирует и посылает backup на удаленный ftp.
Экспорт: export-vm -vm MyVM1 -path D:\backups\VM -copystate -wait -force
Параметр -copystate говорит что нужно скопировать все (включая виртуальный диск => размер экспорта на выходе может получиться очень большим)
Вместо заключения
Как видно управление своими виртуальными машинами из PowerShell может быть очень удобным и ненапряжным. Достаточно лишь прочитать параметры тех команд которые вам необходимы и написать свой скрипт.
P.S. Совершенно не претендую на «открытие Америки» просто решил что кому-нибудь информация об этом полезном модуле окажется полезной. Я описал лишь наиболее простые варианты для которых можно использовать PowerShell management library for Hyper-V. Если кто-то знает или написал собственные более удобные инструменты для оптимизации работы с Hyper-V буду только рад узнать о них.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.