PowerCLIВиртуализация VMware

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”=”TestVMz”} | select name

 

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


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

get-view -viewtype VirtualMachine -filter @{“Name”=”^TestVMz“} | 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

 

Related Post

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

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

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