Pull to refresh

PowerShell+Hyper-V

Reading time 3 min
Views 64K

Не могу уже через gui...


Примерно так начинался мой разговор с другом которому в течение короткого промежутка времени пришлось несколько раз подряд экспортировать виртуальные машины из 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 имя вирт. машины
и в результате:
image
В моем примере всего одна виртуальная машина => я не указывал параметров, но если у вас их много, то наверное следует явно указать ее имя, если не хочется потом пробираться сквозь консольный вывод.
Так же просто например узнать об используемых сетевых интерфейсах для виртуальных машин, достаточно лишь ввести:
Get-VMNic
и получаем:
image
Ну и самое, то что и было необходимо моему другу- возможность делать экспорт в фоне, по расписанию. Для этого можно написать командлет который потом запихнуть в 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 буду только рад узнать о них.
Tags:
Hubs:
+20
Comments 8
Comments Comments 8

Articles