PowerCLI. Get-View. Использование фильтров. Регулярные выражения.

Использование фильтрации вывода результатов командлета Get-View задача не очень простая. В том плане, что обычные приемы, применяемые как в случае с PowerCLI, так и PowerShell не всегда срабатывают.

Выведем список всех ВМ
get-view -viewtype VirtualMachine | select name

Если используем фильтр по имени

get-view -viewtype VirtualMachine -filter @{«Name»=»DHCP»} | select name

то получим одну ВМ.

Но если выполним 
get-view -viewtype VirtualMachine -filter @{«Name»=»TestVM»} | select name

То имеем в выводе уже четыре ВМ, которые содержат в своем имени символы «TestVM».

 

В случае с Get-View мы не можем использовать обычные операторы, как-то «равно — не — равно» (-eq-ne), поэтому воспользуемся регулярными выражениями.
 
Регулярные выражения (Regular Expressions, RegExp)  — это специализированный язык для поиска и обработки текста. Основой регулярных выражений являются управляющие символы (метасимволы), а само регулярное выражение по сути является шаблоном, определяющим правила поиска.


Используем z 

get-view -viewtype VirtualMachine -filter @{«Name»=»TestVM\z»} | select name

 

В данном примере мы указали, что хотим вывести все ВМ, имя которых заканчиваются на TestVM.
Можно использовать следующие равнозначные символы: $, Zили z


Как нам получить только ВМ с именем «TestVM»?
Используем дополнительно символ крышки ^

get-view -viewtype VirtualMachine -filter @{«Name»=»^TestVM\z«} | select name

Теперь мы получили ВМ, которая называется именно TestVM.

И фильтр буквально означает следующее: начало строки, TestVM, конец строки.
 
 
Теперь выведем все ВМ, имена которых не содержат TestVM, для чего используем квадратные скобки [] и ^
get-view -viewtype VirtualMachine -filter @{«Name»=»[^TestVM]«} | select name
 
В статье PowerCLI. Использование Get-View. Часть 2. я упоминал что использование фильтра в выражениях довольно сложно, с использованием регулярных выражений мы можем сделать то, что операторами сравнения у нас тогда не получалось. 
Получим список всех не включенных ВМ. 
get-view -viewtype VirtualMachine -filter @{«Runtime.PowerState»=»[^poweredOn]»} | select Name,@{ Name=»PowerState»; Expression={$_.Runtime.PowerState}}
Как видим, в этот список вошла и приостановленная ВМ. Т.е. фильтр отработал корректно.
 
Но если мы захотим вывести все ВМ, кроме, например New-TestVM
get-view -viewtype VirtualMachine -filter @{«Name»=»[^New-TestVM]»} | select name

то получим ошибку — мол в перечислении «от w до T» ([^New-TestVM]  w в алфавите стоит после T. Объяснить фильтру что знак «» — это вовсе не перечисление у меня не получилось.

При этом использование дефиса в «обычном», выражении, отрабатывает как надо:

get-view -viewtype VirtualMachine -filter @{«Name»=»^New-TestVM»} | select name

Давайте получим все ВМ, имена которых содержат только буквы латинского алфавита, причем этих букв 5

get-view -viewtype VirtualMachine -filter @{«Name»=»^[a-z]{5}$»} | select name

Как видим, в вывод не вошла ВМ с именем AD-CS.

А теперь выведем давайте получим все ВМ, имена которых содержат только буквы латинского алфавита, но этих букв от 1 до 5

get-view -viewtype VirtualMachine -filter @{«Name»=»^[a-z]{1,5}$»} | select name

На этот раз мы воспользовались квантификаторами.
Квантификаторы позволяют указывать диапазон в формате {x,y}, где х — минимально необходимое, а у — максимально возможное количество символов

Все ВМ, имена которых заканчиваются на цифры

 get-view -viewtype VirtualMachine -filter @{«Name»=»[0-9]$»} | select name
или
 get-view -viewtype VirtualMachine -filter @{«Name»=»d$»} | select name

Все ВМ, имена которых содержит пробел

get-view -viewtype VirtualMachine -filter @{«Name»=»[ ]«} | select name
или
get-view -viewtype VirtualMachine -filter @{«Name»=»s«} | select name

Все ВМ, имена которых заканчиваются на цифры

 get-view -viewtype VirtualMachine -filter @{«Name»=»[0-9]$»} | select name

Еще одна конструкция, о которой необходимо упомянуть — это Альтернатива

Символ | (вертикальная черта) в регулярных выражениях означает «или» и позволяет выбрать один из нескольких вариантов.

 

Вернемся к выводу виртуальных машин с именами, содержащими TestVM
get-view -viewtype VirtualMachine -filter @{«Name»=»TestVM»} | select name

Данный вывод не содержит ВМ «Test_VM_3«. Давайте выведем и эту ВМ.

get-view -viewtype VirtualMachine -filter @{«Name»=»TestVM|Test_VM»} | select name

 

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

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

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

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

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

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

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