PowerShell+Hyper-V

    Не могу уже через 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 буду только рад узнать о них.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 8
    • 0
      … И по умолчанию такого модуля в PowerShell конечно нет. Microsoft решила что писать командлеты для управления Hyper-V ни кто не будет (действительно дикая затея). С другой стороны этот мир полон людей умеющих и готовых упрощать жизнь себе и другим пользователям. Так на свет и появился PowerShell management Library for Hyper-V.


      Ага, как замечательно, что есть такие люди, готовые исправлять недочеты глупого майкрософта. WAIT! Это и есть майкрософтовский проект.
      • +1
        Да, вы правы. Так и было в начале, разрешили использовать свои продукты очевидно.
        History
        Что-то дальше их не видно.
        • 0
          Интересно, зачем Вы упорствуете в своей ошибке. Microsoft — это не юзер, а «коллективный юзер», который является координатором всех майкрософтовских проектов. Этот «юзер» никогда ничего не коммитит — коммитят сотрудники этого «юзера» под собственными аккаунтами на codeplex. Оба остальных координатора pshyperv — сотрудники МС (у одного из них это прямо указано в профайле). Этот проект указан в списке
          • +1
            Я же написал что Вы правы. Где же тут упорство? Codeplex=MS+Community, естественно там будут работники MS. Я думаю (именно думаю), что не было приказа о создании этого проекта «сверху». И если эти работники MS его начали, то по своей задумке. Но если у вас больше достоверной информации, всегда готов выслушать.
      • 0
        Проникаюсь уважением к Power Shell

        первым этапом был случай, когда я на подаренной мне (Майкрософтом) винде, запущенной ради хохмы, в павершелле набрал man man
        • +1
          Однако если нужно экспортировать или импортировать виртуальную машину в количестве N-штук в промежуток t-времени то используя Hyper-V Manager можно сломать кнопку у мыши и жутко возненавидеть Hyper-V.

          У Майкрософт для более удобного управления над парком Hyper-V хостов есть продукт SCVMM. В данной ситуации это излишество. Просто для справки. Вдруг кому понадобится.
          • 0
            > … И по умолчанию такого модуля в PowerShell конечно нет. Microsoft решила что писать командлеты для управления Hyper-V ни кто не будет (действительно дикая затея).

            Add-PSSnapin -Name Microsoft.SystemCenter.VirtualMachineManager

            в результате появляются Get-VMMServer, Get-VM, Get-VirtualNetworkAdapter, Get-VirtualDiskDrive и прочие плюшки.
            • 0
              Читаю вереницу статей о PowerShell и радуюсь. Наконец-то появилась вменяемая командная оболочка для выполнения и упрощения выполнения сотен действий под Windows! Скоро, если уже не сейчас, она вплотную приблизится к функциональности bash. А может и опередит его.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.