PowerCLI. Использование хеш таблиц (hash tables).

В прошлых статьях я рассказал как можно одной командой вывести значения, которые содержатся на разных уровнях вложенности. Например значения из Сonfig.tools и .Guest вывода командлета Get-View -ViewType VirtualMachine. Несомненно это очень удобно — вместо последовательного выполнения этих командлетов и выискивания глазами интересующих нас полей мы получаем все в одном месте, и при этом не видим ничего лишнего.

 





Также я привел вывод команд 

$VM.Summary.Guest
$VM.Guest


Обратив внимание на более компактный вид команды $VM.Summary.Guest.

И вот на следующем этапе нам, вероятно, захочется вывести значения не по двум, а скажем по шести полям. И поскольку мы понимаем, что вывод будет весьма громоздким, мы зададимся вопросом: А можно ли создать свой собственный Summary, или даже множество различных вариантов Summary из интересующих нас значений, и так же аккуратно вывести его в один столбец?
Оказывается можно! И этот инструмент называется хеш таблицы.

Хеш таблицы (hash tables).

— это специальная структура данных для хранения пар ключей и их значений.

Для ее создания достаточно ввести $VM_Prop = @{}. Все, мы создали новый объект — пустую хеш таблицу.


Выполнив

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

мы получим доступ к элементу $VM.Name, что и будет нашим самым первым значением. А ключом назначим VmName.

Выполним

$VM_PropVmName«]=$VM.Name  


Теперь наша таблица не пустая!

Прежде чем перейти к тому, ради чего собственно мы и обратились к хеш таблицам, еще немного теории.

Наша переменная $VM_Prop содержит объект: хеш таблицу.
И мы может посмотреть элементы этого объекта, выполнив

 $VM_Prop | get-member  

Вывод содержит методы (что можно сделать) и свойства. 
На данный момент нас интересуют только свойства 

 $VM_Prop | Get-Member -MemberType Properties

Извлечем свойства Values и Keys
В приведенном скриншоте видим ранее введенные нами значения.
Также видно, что мы действительно создали объект Hashtable



Теперь перейдем к практическому использованию технологии, с которой мы только что ознакомились.
Будем использовать следующий вид записи нашего объекта: 

$VM_Prop = @{
     VmName=$VM.Name
      NameOS=$VM.Summary.Guest.HostName
      IP=$VM.Summary.Guest.IpAddress
     ToolsVersion=$VM.config.Version
     ToolsUpgrade=$VM.config.tools.ToolsUpgradePolicy
     ToolStatus=$VM.Guest.ToolsVersionStatus

 

}

Создав хеш таблицу и заполнив ее, выведем ее значения:

$VM_Prop
Обратим внимание на порядок вывода полей, — он не соответствует тому, как мы определили в таблице.
Это решается использованием свойством [ordered]
$VM_Prop = [ordered]@{
     VmName=$VM.Name
      NameOS=$VM.Summary.Guest.HostName
      IP=$VM.Summary.Guest.IpAddress
     ToolsVersion=$VM.config.Version
     ToolsUpgrade=$VM.config.tools.ToolsUpgradePolicy
     ToolStatus=$VM.Guest.ToolsVersionStatus
}


Теперь порядок вывода полностью соответствует порядку ввода. 
Когда мы рассматривали вопрос использования Хеш таблицы для создания своего собственного компактного вывода нужных нам элементов, мы использовали ключ MemberType Properties в команде Get-Member для вывода только свойств.
Но поняв, что из себя представляет хеш таблица, мы догадываемся что только красивым и компактным выводом ее использование не ограничивается.
Наберем команду без ключей  

$VM_Prop | Get-Member

Мы видим список доступных методов. Их рассмотрение выходит за пределы данной статьи, однако для демонстрации их возможностей вполне можно ограничиться одним. Например методом Remove.
Выведем исходную таблицу, а затем подредактируем ее с помощью Remove.

Как видно из данного примера созданный нами объект можно легко модернизировать.

Читайте также:

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Добро пожаловать в блог IT-пилот

Введите Ваш Email чтобы подписаться

Подписка оформлена!