Команда PowerShell Select-Object позволяет вам легко выбирать объекты и свойства из группы входных объектов. Но иногда вам нужно знать больше. Переключатель ExpandProperty для Select-Object раскрывает детали определенного свойства.
Откройте для себя возможности переключателя PowerShell Expand Property (-ExpandProperty
) на примерах в этом учебнике.
Требования
Этот учебник будет практическим демонстрационным. Если вы хотите следовать за ним, вам понадобится компьютер с Windows с PowerShell 5.1 и выше. В этой статье используется компьютер с Windows 10 и PowerShell 5.1.
Извлечение значений объектов свойства с помощью PowerShell Expand Property
Войдите на ваш компьютер под учетной записью Windows и запустите терминал PowerShell. В этом разделе вы познакомитесь с командой Select-Object
и ее переключателем ExpandProperty
.
1. Запустите команду Get-Service, чтобы получить список всех служб на вашей системе. Перенаправьте вывод на команду Select-Object, чтобы выбрать и отобразить только свойство name каждого объекта службы, как показано ниже.
Теперь вы должны увидеть один столбец объектов, представляющих список имен служб на вашей системе, как на скриншоте ниже.

2. Запустите команду Get-Member в конце предыдущего конвейера, чтобы подтвердить тип объектов, которые возвращает select-object, как показано ниже. Знание типа объекта помогает создавать функции или cmdlet’ы для расширения ваших конвейеров.
Обратитесь к скриншоту ниже, и вы заметите, что несмотря на то, что ключ -Property выводит то, что кажется списком строк, это выбранный список объектов System.ServiceProcess.ServiceController.

3. Замените команду Get-Members на mkdir, чтобы автоматически создать папку для каждой службы. Ключ -first 5 ограничивает количество возвращаемых объектов. В свою очередь функция mkdir создаст только пять папок на основе объектов в конвейере.
Вы должны увидеть вывод, аналогичный скриншоту ниже, указывающему на успешную попытку.

4. Удалите папки, заменив mkdir на rmdir, как показано в отрывке ниже. Включите ключ -Verbose, чтобы показать подробный вывод в вашем терминале.
Команда rmdir ожидает строки и не может обрабатывать представление объектов ServiceController в виде хэш-таблицы. Ваша попытка должна завершиться несколькими ошибками, как показано на скриншоте ниже.

5. Измените переключатель -Property на переключатель -ExpandProperty, как показано в следующем фрагменте кода. Это позволяет получить значение свойства в виде строки, когда вам нужна только строка.
Совместно с rmdir вы должны видеть, что ваша попытка автоматически удалить папки проходит успешно без ошибок, как показано на скриншоте ниже.

Создание набора выбранных объектов с определенными свойствами
Для сокращения фрагментов кода в разделах создайте переменную для первых 20 служб на вашем компьютере следующим образом.
Выполните команду Get-Service
, выберите первые 20
объектов с помощью команды Select-Object
и сохраните объекты в переменной с именем $testServices
. Выберите только свойства Name
, Status
и DependentServices
, как показано ниже.
Переключатель PowerShell Expand Property может расширить только одно свойство за раз, в отличие от переключателя Property, который может выбирать несколько свойств одновременно.
Выполните переменную $testServices
, чтобы просмотреть структуру ее содержимого.
Вы должны увидеть таблицу, отображающую свойства отобранных сервисов, аналогично скриншоту ниже.

Расширение свойства коллекции с помощью PowerShell Expand Property
A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.
Выполните командлет Select-Object
для переменной $testServices
и раскройте свойство DependentServices
для каждого сервиса.
Поскольку DependentServices
является свойством коллекции, вывод представляет собой список сервисов во всех заполненных коллекциях, как показано ниже. Обратите внимание на дубликаты в списке из-за конкатенации результатов из расширенного свойства DependentServices
.

Комбинирование свойства с PowerShell Expand Property для категоризированного вывода
Теперь у вас есть список зависимых сервисов, но как узнать, от какого сервиса они зависят? В этом разделе вы узнаете, как использовать переключатель -Property
для категоризации расширенного свойства.
Запустите команду ниже, чтобы категоризировать свойства DependentServices
по Name
.
Поскольку зависимые сервисы уже имеют свойство Name
, шаг категоризации завершается неудачей, как показано ниже.
Ошибка ниже сообщает вам, что начальный список сервисов (в $testServices) уже имеет свойство Name, конфликтующее с собственным свойством Name в расширенном свойстве DependentServices.

Один из способов обойти это – создать Вычисляемые свойства, чтобы переименовать свойство идентификатора следующим образом.
Сохраните измененный предыдущий вывод команды, указав вычисляемое свойство с именем Depends On в переменной с именем $depServ. Depends on будет содержать значение Name для каждой службы в $testService.
Имя свойства, Зависит от
, было произвольно выбрано в этом учебнике и может быть любым выражением по вашему выбору.
Передайте объект в $depServ
через Select-Object
, чтобы выбрать зависимые свойства службы Name
, Status
и Depends On
.
Теперь вы можете определить, какие службы зависят от служб в $testServices
, как показано ниже.

Комбинирование Format-List с PowerShell Expand Property для подробности
PowerShell может ограничивать отображение свойств объекта, особенно в табличном выводе, и вывод с ключом -ExpandProperty
может иметь те же ограничения. В качестве обходного пути вы можете отображать расширенные свойства в виде списка.
Запустите cmdlet Get-Process
ниже, чтобы извлечь все модули
, которые использует процесс explorer
. Включите ключ -ExpandProperty
, чтобы отобразить свойства модулей.
На вашем экране должен отображаться вывод, аналогичный следующему снимку экрана, автоматически усеченный для отображения только трех свойств.

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

Заключение
Достигнув этой точки успешно, вы увидели, как воспользоваться переключателем PowerShell Expand Property (-ExpandProperty) cmdlet Select-Object. PowerShell предоставляет целый набор полезных cmdlet для многих общих задач. Вы можете усилить свои новые знания, изучив, как быстро отображать файлы с помощью PowerShell Cat.
Source:
https://adamtheautomator.com/powershell-expand-property/