среда, 24 января 2018 г.

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

Но если мы хотим самим задать имя колонок, например вместо HostNameName, вместо IpAddressIP, то конструкция усложнится
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.

Комментариев нет:

Отправить комментарий