PowerCLI. Использование Get-View. Часть 1.

PowerCLI. Использование Get-View. Часть 1.

У меня накопилось определенное количество информации об использовании Get-View. И чтобы все это систематизировать, в том числе и для себя, пишу данный цикл статей.

Get-View — это более продвинутая функция PowerCLI, которая позволяет получить большую гибкость в управлении виртуальной инфраструктурой. Кроме того, скорость выполнения Get-View выше, чем аналогичных командлетов PowerCLI. 

Для понимания работы Get-View сравню его с командлетом Get-VM.

Get-VM



Если нужна информация по одной ВМ, то определим имя конкретной ВМ

Get-VM -Name DHCP

Для вывода более подробной информации 

 Get-VM -Name DHCP  | Select *
Также выводить расширенную информации позволяет использование Format-List -Property *
Get-VM -Name DHCP  | Format-List -Property *


Теперь запустим 

 get-view -viewtype VirtualMachine -filter @{«Name»=»DHCP»}
Я использую фильтр по имени ВМ (-filter @{«Name»=»DHCP»}, поскольку вывод информации по всем ВМ довольно громоздкий.
 


Как видим, поля, выводимые командлетами  Get-view  и Get-VM -Name DHCP  | Select * различаются.

В выводе get-view мы видим такие поля как 
— Config
— Runtime
— Guest
— Summary
и др.

И через эти значения мы получаем еще больше информации. 
Для удобства будем использовать переменную VM:

$VM = get-view –viewtype VirtualMachine –filter @{“Name”=”DHCP”}

Теперь достаточно после переменной через точку поставить соответствующее значение, например

$VM.Summary



И здесь мы опять видим те же значения. Наберем

$VM.Summary.Guest

И сравним с выводом 

$VM.Guest


Как видим, вывод командлета $VM.Summary.Guest более компактный.
Идем дальше

$VM.Summary.Guest.HostName
$VM.Summary.Guest.IpAddress

Но всегда необходимо использовать более простой способ, например здесь мы получим ту же информацию

$VM.Guest.IpAddress


Пройдясь по вложениям и узнав что доступно, можно начать выводить интересующую нас информацию одной командой

$VM.Guest | Select HostName, IPAddress


Если по всем ВМ, то 

(get-view -viewtype VirtualMachine).guest | Select HostName, IPAddress


Но если мы хотим самим задать имя колонок, например вместо HostName — Name, вместо IpAddress — IP, то конструкция усложнится

Get-View -ViewType VirtualMachine | Select Name, @{N=’IP’;E={[string]::Join(‘,’,$_.Guest.IPAddress)}}

Остановлюсь на этой конструкции поподробнее.
В данном примере мы 
Get-View -ViewType VirtualMachine — получаем все ВМ
| Select — определяем выводимые значения.
Name — выводится имя ВМ
и, через запятую, выводим поле, содержащее IP адрес (Guest.IPAddress). 
@{N=’IP’;E={[string]::Join(‘,’,$_.Guest.IPAddress)}}, где N — имя столбца E — значение выражения, которое выводится в столбце. 
В данный момент не буду разъяснять значение всей конструкции, остановлюсь лишь на $_.Guest.IPAddress. По сути это тоже самое, что и $VM.Guest.IpAddress (за исключением фильтра) из прошлого примера. 
Что собой представляет $VM.Guest.IpAddress?  
Ранее мы использовали команду присвоения $VM = get-view –viewtype VirtualMachine –filter @{“Name”=”DHCP”}. Т.е. в переменную VM мы сохранили результат выполнения команды Get-View. Таким образом, выполняя $VM.Guest.IpAddress мы извлекаем значение Guest.IpAddress из уже имеющихся данных. Т.е. имеет место передача данных по конвейеру от одной команды к другой.
$_ — это ссылка на текущий объект в конвейере. Т.е. в данном примере на результат выполнения команды Get-View -ViewType VirtualMachine.

Примечание:
Также я встречал в статьях термин трубопровод. Так вот — это тоже самое. В оригинале рассматриваемый нами термин именуется pipeline, который переводится на русский в том числе и как трубопровод.

А если нужны данные по двум параметрам? Например по IP-адресу и имени в гостевой ОС? Тогда просто через запятую добавляем еще одно поле

@{N=’Guest Name’;E={[string]::Join(‘,’,$_.Guest.HostName)}}
Get-View -ViewType VirtualMachine | Select Name, @{N=’IP’;E={[string]::Join(‘,’,$_.Guest.IPAddress)}}, @{N=’Guest Name‘;E={[string]::Join(‘,’,$_.Guest.HostName)}}

Данная команда выводит информацию по всем ВМ.
Если же нужно про конкретную, то применяем фильтр (который мы уже использовали ранее)


Ну и в заключении первой части визуально продемонстрирую разницу в выполнении команд. А поможет в этом команда Measure-Command -Expression {Выражение}, про которую я писал в статье Время выполнения команды в VMware vSphere PowerCLI.
Напомню, что Measure-Command лишь замеряет время выполнения команды, но не выводит результат ее выполнения.

 
Итак, выполним
Measure-Command -Expression {Get-VM -Name DHCP}
Measure-Command -Expression {Get-View -viewtype VirtualMachine -filter @{«Name»=»DHCP»}}

Как видим, 45 миллисекунд у Get-View против 130 мс у Get-VM.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *