Школа Geek: обучение форматированию, фильтрация и сравнение в PowerShell

Оглавление:

Школа Geek: обучение форматированию, фильтрация и сравнение в PowerShell
Школа Geek: обучение форматированию, фильтрация и сравнение в PowerShell

Видео: Школа Geek: обучение форматированию, фильтрация и сравнение в PowerShell

Видео: Школа Geek: обучение форматированию, фильтрация и сравнение в PowerShell
Видео: Как пользоваться NjRAT? Приколы вируса удаленного доступа - YouTube 2024, Май
Anonim
В этом выпуске Geek School мы рассмотрим форматирование, фильтрацию и сравнение объектов в Pipeline.
В этом выпуске Geek School мы рассмотрим форматирование, фильтрацию и сравнение объектов в Pipeline.

Обязательно прочитайте предыдущие статьи в серии:

  • Узнайте, как автоматизировать Windows с помощью PowerShell
  • Обучение использованию командлетов в PowerShell
  • Обучение использованию объектов в PowerShell

И оставайтесь настроенными для остальной части серии всю неделю.

Форматирование по умолчанию

Когда я впервые начал работать с PowerShell, я думал, что все было волшебным, но, правда, просто нужно немного времени, чтобы понять, что происходит под капотом. То же самое верно для системы форматирования PowerShell. На самом деле, если вы запустите командлет Get-Service, выведенный вывод отобразит только 3 свойства: Status, Name и DisplayName.

Но если вы передаете Get-Service Get-Member, вы увидите, что объекты ServiceController имеют намного больше, чем только эти три свойства, так что происходит?
Но если вы передаете Get-Service Get-Member, вы увидите, что объекты ServiceController имеют намного больше, чем только эти три свойства, так что происходит?
Ответ лежит в скрытом файле, который определяет, как большинство встроенных командлетов отображает их вывод. Чтобы понять, введите в оболочку и нажмите Enter.
Ответ лежит в скрытом файле, который определяет, как большинство встроенных командлетов отображает их вывод. Чтобы понять, введите в оболочку и нажмите Enter.

notepad C:WindowsSystem32WindowsPowerShellv1.0DotNetTypes.format.ps1xml

Если мы используем функцию поиска Notepad, мы можем быстро перейти к разделу, в котором подробно описывается вывод командлета Get-Service, ища тип ServiceController.

Вдруг вы увидите, что под капотом PowerShell форматирует любые объекты в Pipeline, которые относятся к типу ServiceController, и создает таблицу с тремя столбцами: Status, Name и DisplayName. Но что, если тип, с которым вы имеете дело, не имеет записи в этом файле или любого другого файла формата, если на то пошло? Хорошо, тогда это довольно просто. Если объект, выходящий из конвейера, имеет 5 или более свойств, PowerShell отображает все свойства объекта в списке; если он имеет менее 5 свойств, он отображает их в таблице.
Вдруг вы увидите, что под капотом PowerShell форматирует любые объекты в Pipeline, которые относятся к типу ServiceController, и создает таблицу с тремя столбцами: Status, Name и DisplayName. Но что, если тип, с которым вы имеете дело, не имеет записи в этом файле или любого другого файла формата, если на то пошло? Хорошо, тогда это довольно просто. Если объект, выходящий из конвейера, имеет 5 или более свойств, PowerShell отображает все свойства объекта в списке; если он имеет менее 5 свойств, он отображает их в таблице.

Форматирование ваших данных

Если вас не устраивает форматирование объекта или типа по умолчанию, вы можете свернуть свое собственное форматирование. Для этого необходимо знать три командлета.

  • Format-List
  • Format-Table
  • Format-Wide
Image
Image

Format-Wide просто берет набор объектов и отображает единственное свойство каждого объекта. По умолчанию он будет искать свойство name; если ваши объекты не содержат свойства имени, он будет использовать первое свойство объекта после сортировки свойств в алфавитном порядке.

Get-Service | Format-Wide

Как вы можете видеть, он также по умолчанию имеет два столбца, хотя вы можете указать как свойство, которое вы хотите использовать, так и сколько столбцов вы хотите отображать.
Как вы можете видеть, он также по умолчанию имеет два столбца, хотя вы можете указать как свойство, которое вы хотите использовать, так и сколько столбцов вы хотите отображать.

Get-Service | Format-Wide -Property DisplayName -Column 6

Если что-то отформатировано как таблица по умолчанию, вы всегда можете переключить его в режим списка с помощью командлета Format-List. Давайте рассмотрим вывод командлета Get-Process.
Если что-то отформатировано как таблица по умолчанию, вы всегда можете переключить его в режим списка с помощью командлета Format-List. Давайте рассмотрим вывод командлета Get-Process.
Image
Image

Этот табличный вид действительно очень подходит для такой информации, но позвольте нам сделать вид, что мы хотим просмотреть его в виде списка. Все, что нам действительно нужно сделать, это Format-List.

Get-Process | Format-List

Как вы видите, по умолчанию отображаются только четыре элемента в списке. Чтобы просмотреть все свойства объекта, вы можете использовать подстановочный знак.
Как вы видите, по умолчанию отображаются только четыре элемента в списке. Чтобы просмотреть все свойства объекта, вы можете использовать подстановочный знак.

Get-Process | Format-List –Property *

Кроме того, вы можете выбрать только нужные свойства.
Кроме того, вы можете выбрать только нужные свойства.

Get-Process | Format-List –Property name,id

Image
Image

Format-Table, с другой стороны, берет данные и превращает их в таблицу. Поскольку наши данные из Get-Process уже представлены в виде таблицы, мы можем использовать его для простого выбора свойств, которые мы хотим отобразить в таблице. Я использовал параметр AutoSize, чтобы все данные вписывались в один экран.

Get-Process | Format-Table name,id –AutoSize

Image
Image

Фильтрация и сравнение

Одна из лучших вещей, связанных с использованием конвейера на основе объектов, заключается в том, что вы можете фильтровать объекты из конвейера на любом этапе с помощью командлета Where-Object.

Get-Service | Where-Object {$_.Status -eq “Running”}

Использование объекта на самом деле очень просто. $ представляет текущий объект конвейера, из которого вы можете выбрать свойство, которое вы хотите фильтровать. Здесь были только объекты, где свойство Status равно Running. В блоке сценария фильтрации есть несколько операторов сравнения:
Использование объекта на самом деле очень просто. $ представляет текущий объект конвейера, из которого вы можете выбрать свойство, которое вы хотите фильтровать. Здесь были только объекты, где свойство Status равно Running. В блоке сценария фильтрации есть несколько операторов сравнения:
  • eq (равно)
  • neq (не равно)
  • (больше)
  • ge (больше или равно)
  • lt (меньше)
  • le (меньше или равно)
  • как (Подстановочная строка)

Полный список и дополнительная информация можно просмотреть в файле концептуальной справки about_comparison, однако для синтаксиса Where-Obeject требуется некоторое время. Это все за это время!

Рекомендуемые: