понедельник, 17 мая 2010 г.

vSphere PowerCLI: урок 2

Как и обещалось, в рамках уроков по PowerCLI будут так же рассказаны основы PowerShell, 2-в-1.

Для начала давайте подробнее посмотрим на механизм, известный в PowerShell как конвейер (pipe, pipeline).

Большинство командлетов (команд) предоставляют некий вывод при своей работе. Например, когда мы запустили Get-VM, был выведен список ВМ, включающий дополнительную информацию. При помощи конвейера мы можем подхватить этот вывод и обработать следующим командлетом, для чего нужно поставить символ | и написать следующую команду. Можно использовать командлет Where-Object, чтобы отфильтровать информацию на основе свойств, предоставленных предыдущим командлетом.

В предыдущем уроке было упомянуто о том, что командлеты имеют свойства и методы, и одним из свойств объектов, возвращаемых командлетом Get-VM является PowerState, которое может быть использовано для нахождения ВМ в определенном состоянии. Итак, если мы хотим найти все выключенные ВМ, то для этого нужно вывод Get-VM перенаправить на вход командлета Where-Object:
Get-VM | Where-Object {$_.PowerState -eq "PoweredOff"}


Когда эта конструкция выполнится, мы получим список выключенных ВМ:



Достаточно изменить команду для фильтрации по "PoweredOn" и мы получим список включенных ВМ:

 

Как же узнать свойства командлета Get-VM (точнее свойства возвращаемого им объекта), по которым можно осуществлять фильтрацию? Как узнать какие у командлета доступны методы? Все достаточно просто, и делается при помощи того же самого конвейера, достаточно перенаправить желаемый командлет в Get-Member. Для сокращения записи можно использовать алиасы, и соотв. вместо Get-Member можно написать просто gm:
Get-VM | gm

 

Продолжим идею, и добавим командлет Start-VM, и держу пари, что вы угадаете зачем. Включим все выключенные ВМ, добавив еще один шаг в конвейер:
Get-VM | Where-Object {$_.PowerState -eq "PoweredOff"} | Start-VM
Последнее, что я хочу сделать в этом уроке - пояснить особенности конвейерной обработки. Хотя результат Get-VM выглядит как обычный текст, на самом деле при работе этого командлета формируется список объектов (ВМ в данном случае). Таким образом, командлет Start-VM не пытается стартовать ВМ с именем "SCOM PoweredOff  1  256", он берет имя ВМ из свойства Name объекта, ссылку на который вернул предыдущий командлет. В данном случае это просто "SCOM".

В последующих уроках я попытаюсь объяснить что такое объекты, поскольку PowerShell объектно-ориентированный язык.

<< Предыдущий урок | Следующий урок >>

1 комментарий:

  1. Спасибо!
    Буду очень признателен, если Вы рассмотрите управление снапшотами через PowerCLI в следующих материалах. Иногда возникает ситуация, когда машина, после миграции, занимает очень много места, а через gui проблема не решается никак, кроме клонирования.

    ОтветитьУдалить