PowerShell Select-Object сделан простым: Практическое руководство для начинающих

PowerShell – это мощный инструмент для управления данными, но обычно предоставляет слишком много информации сразу. Как вы знаете, избыток информации может быть подавляющим и сложным для анализа. Но не переживайте. Команда Select-Object в PowerShell пригодится.

В этом уроке вы узнаете основы использования команды Select-Object, чтобы уменьшить объем или фильтровать результаты различными способами.

Продолжайте читать и начните безболезненное управление данными!

Предварительные требования

В этом учебнике представлены практические демонстрации. Чтобы их повторить, убедитесь, что у вас установлен PowerShell. В уроке используется Windows 10 с PowerShell 7, но также должна подойти любая современная версия.

Что такое команда Select-Object в PowerShell?

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

Основный синтаксис Select-Object выглядит следующим образом, где:

Parameter Function
-InputObject Specifies the object or data set you want to work with, which can be an object, an array of objects, or an output of another cmdlet.
Property Specifies the property or properties to select from the InputObject parameter. You can specify multiple properties separated by commas.
Optional Parameters Allows you to refine your selection, such as selecting a certain number of objects or skipping objects.
Select-Object [-InputObject] [Property] [Optional Parameters]

Выбор объектов по свойствам

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

Предположим, у вас есть список процессов, запущенных на вашем компьютере, но вы хотите видеть только их имена. Указание свойства Name для командлета Select-Object решит эту задачу.

Откройте PowerShell и выполните следующую команду Get-Process, чтобы получить и напечатать список всех процессов только (Select-Object) по Name.

Get-Process | Select-Object Name
Selecting objects by property

Помимо запущенных процессов, командлет Select-Object позволяет работать с файлом CSV. Предположим, у вас есть файл CSV с множеством столбцов, но вам нужны только некоторые из них. В этом случае дайте командлету Select-Object выбрать только соответствующие столбцы, чтобы вы могли манипулировать и анализировать данные.

Теперь выполните следующую команду, чтобы выбрать несколько свойств (Select-Object): Name и CPU (разделенные запятыми). Эта функция полезна при работе с большими наборами данных, когда вам нужны только некоторые свойства каждого объекта.

Кроме того, эта команда также сортирует список объектов (Sort-Object) в порядке -Descending с использованием свойства CPU в качестве ссылки.

Get-Process | Select-Object Name, CPU | Sort-Object -Descending CPU

Ниже вы можете увидеть перечисленные процессы, начиная с наиболее ресурсоемкого, Google Chrome (если он у вас установлен).

Selecting multiple properties

Создание вычисляемого свойства

При поиске свойств, которые лучше подходят для ваших нужд, рассмотрите возможность создания вычисляемого свойства. Почему? Вычисляемые свойства позволяют вам обрабатывать и преобразовывать данные, комбинировать существующие свойства, выполнять математические операции или форматировать данные в определенном виде.

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

Запустите следующую команду, чтобы выполнить следующее:

  • Получите список запущенных процессов (Get-Process), выбрав только (Select-Object) свойства Name и CPU.
  • Создайте новое вычисляемое свойство с именем \(\text{Name}\) \(\text{Memory (MB)}\), которое вычисляет использование памяти каждым процессом в мегабайтах. Использование памяти рассчитывается с использованием \(\text{Expression}\), которая делит свойство \(\text{WorkingSet}\) на \(\text{1MB}\). Любое допустимое выражение PowerShell работает при создании вычисляемого свойства.
  • Выведите все полученные работающие процессы в порядке убывания по вычисленному свойству \(\text{Memory (MB)}\).
Get-Process | Select-Object Name, CPU, @{Name="Memory (MB)";Expression={$_.WorkingSet/1MB}} | Sort-Object -Descending "Memory (MB)"
Creating a calculated property

Исключение указанного свойства

В реальной жизни результаты команды \(\text{Select-Object}\) могут содержать чувствительную информацию, такую как имена пользователей и пароли. Как избежать этого риска?

Чтобы предотвратить отображение чувствительных данных в выводе, добавьте параметр \(\text{-ExcludeProperty}\) для исключения указанного свойства из вывода.

Запустите следующую команду для выполнения следующих задач:

  • Получите список всех файлов и папок ( \(\text{Get-ChildItem}\) ) в каталоге \(\text{C:\\}\) рекурсивно (\(\text{-Recurse}\)).
  • Перенаправьте вывод в командлет Select-Object, чтобы выбрать свойства Name, Length и LastWriteTime.
  • Исключите (-ExcludeProperty) свойство FullName из вывода. Это предотвратит отображение полных путей в выводе, которые могут содержать конфиденциальную информацию.
Get-ChildItem -Path C:\ -Recurse | Select-Object Name, Length, LastWriteTime -ExcludeProperty FullName
Excluding a specified property

Пропуск первого или последнего числа объектов

При работе с массивными наборами данных поиск нужной информации может быть похожим на поиск алмаза в угольной шахте. Но зачем тратить время на просмотр несущественных данных?

В PowerShell командлет Select-Object предоставляет два параметра, которые позволяют исключить первое (-Skip) и последнее (-SkipLast) число объектов в выводе, соответственно.

Чтобы увидеть, как работает пропуск нескольких объектов из вывода:

Выполните нижеприведенную команду, чтобы получить все работающие процессы (Get-Process), но -Skip первые 100 возвращенных объектов.

Обратите внимание, что количество пропущенных объектов основано на целочисленных значениях (положительных и целых числах без десятичных знаков), которые в данном случае равны 100.

Get-Process | Select-Object -Skip 100
Skipping the first 100 objects

Теперь выполните следующую команду, чтобы получить список содержимого рабочего каталога (Get-ChildItem), но пропустите последние (-SkipLast) 100 возвращенных объектов.

Get-ChildItem | Select-Object -SkipLast 100
Skipping the last 100 objects

Выбор первого или последнего числа объектов

Кроме того, пропуская первый и последний номер объектов, вас также может заинтересовать выбор первого и последнего номера объектов. Команда Select-Object поддерживает это с помощью параметров First и Last, которые позволяют вам пропустить все остальное для экономии времени и ресурсов.

Запустите следующую команду, чтобы получить все процессы, но выбрать только (Select-Object) -First 10 объектов, возвращаемых.

Get-Process | Select-Object -First 10
Selecting the first 10 objects returned

Теперь выполните команду ниже, чтобы получить все содержимое рабочего каталога (Get-ChildItem), но выберите только (Select-Object) -Last 10 возвращаемых объектов.

Get-ChildItem | Select-Object -Last 10
Selecting the last 10 objects returned

Исключительный выбор уникальных объектов

При работе с большими наборами данных вы столкнетесь с дублирующимися значениями, которые возможно захотите исключить из вывода, что типично. Но хорошо то, что с командой Select-Object вам не нужно вручную исключать дублирующиеся значения.

Добавление параметра -Unique позволяет выбрать только уникальные объекты из вывода, упрощая ваш анализ и повышая точность результатов.

Запустите команду ниже, чтобы выбрать (Select-Object) и вернуть -First 2 объекта.

"1","1","2","3" | Select-Object -First 2

Ниже вы можете увидеть два возвращенных объекта, независимо от того, является ли другой дублирующимся значением.

Selecting and returning objects with duplicate values

Наконец, выполните следующую команду, чтобы вернуть только одно уникальное значение -Unique для каждого из выбранных -First 2 объектов.

"1","1","2","3" | Select-Object -First 2 -Unique

На этот раз вы видите только один возвращенный объект из первых двух выбранных, поскольку другой является всего лишь дублирующим значением. Как вы понимаете, эти результаты демонстрируют, что параметр -Unique удобен для быстрого удаления любых дублирующихся объектов в ваших данных.

Selecting unique objects exclusively

Заключение

PowerShell, как правило, выдает избыток информации. Но в этом учебнике вы узнали, как команда PowerShell Select-Object помогает упростить ваши данные, чтобы видеть только необходимую информацию.

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

На этом этапе вы можете быстро уточнить свои результаты, чтобы они лучше подходили для анализа и устранения неполадок. Но почему бы не научиться тому, как форматировать ваши вычисленные свойства, чтобы улучшить читаемость и удобство использования?

Source:
https://adamtheautomator.com/powershell-select-object/