Домашняя » как » Geek School Learning Форматирование, фильтрация и сравнение в PowerShell

    Geek School Learning Форматирование, фильтрация и сравнение в PowerShell

    В этом выпуске Geek School мы рассмотрим форматирование, фильтрацию и сравнение объектов в конвейере..

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

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

    И оставайтесь с нами до конца сериала всю неделю.

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

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

    Но если вы передаете Get-Service в Get-Member, вы видите, что объекты ServiceController имеют гораздо больше, чем просто эти три свойства, так что происходит?

    Ответ лежит в скрытом файле, который определяет, как большинство встроенных командлетов отображают свой вывод. Чтобы получить представление, введите в оболочку следующее и нажмите Enter.

    Блокнот C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

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

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

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

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

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

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

    Get-Service | Format-Wide

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

    Get-Service | Широкий формат - Свойство DisplayName - Столбец 6

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

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

    Get-Process | Format-List

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

    Get-Process | Формат-Список -Свойства *

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

    Get-Process | Format-List -Недвижимое имя, идентификатор

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

    Get-Process | Имя таблицы формата, id -AutoSize

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

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

    Get-Service | Where-Object $ _. Status -eq «Выполняется»

    Использовать объект на самом деле очень просто. $ _ представляет текущий объект конвейера, из которого вы можете выбрать свойство, по которому вы хотите фильтровать. Здесь хранятся только те объекты, для которых свойство Status равно Running. В блоке сценария фильтрации можно использовать несколько операторов сравнения:

    • экв (равно)
    • neq (не равно)
    • GT (больше, чем)
    • ge (больше или равно)
    • lt (меньше чем)
    • le (меньше или равно)
    • например

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