Поиск по сайту:

Select-Object (Microsoft.PowerShell.Utility)


Select-Object

Модуль:
Microsoft.PowerShell.Utility

Выбирает объекты или свойства объекта.

Синтаксис

Select-Object
      [-InputObject <PSObject>]
      [[-Property] <Object[]>]
      [-ExcludeProperty <String[]>]
      [-ExpandProperty <String>]
      [-Unique]
      [-CaseInsensitive]
      [-Last <Int32>]
      [-First <Int32>]
      [-Skip <Int32>]
      [-Wait]
      [<CommonParameters>]
Select-Object
      [-InputObject <PSObject>]
      [[-Property] <Object[]>]
      [-ExcludeProperty <String[]>]
      [-ExpandProperty <String>]
      [-Unique]
      [-CaseInsensitive]
      [-Skip <Int32>]
      [-SkipLast <Int32>]
      [<CommonParameters>]
Select-Object
      [-InputObject <PSObject>]
      [-Unique]
      [-CaseInsensitive]
      [-Wait]
      [-Index <Int32[]>]
      [<CommonParameters>]
Select-Object
      [-InputObject <PSObject>]
      [-Unique]
      [-CaseInsensitive]
      [-SkipIndex <Int32[]>]
      [<CommonParameters>]

Описание

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

Чтобы выбрать объекты из коллекции, используйте Первый, Последний, Уникальный, Пропустить и Индекс. параметры. Чтобы выбрать свойства объекта, используйте параметр Property. Когда вы выбираете свойства, Select-Object возвращает новые объекты, имеющие только указанные свойства.

Начиная с Windows PowerShell 3.0, Select-Object включает функцию оптимизации, которая не позволяет командам создавать и обрабатывать объекты, которые не используются.

Когда вы используете Select-Object с параметрами First или Index в командном конвейере, PowerShell останавливает команду, которая генерирует объекты, как только выбранное количество объектов достигнуто. Чтобы отключить такое поведение оптимизации, используйте параметр Wait.

Примеры

Пример 1. Выбор объектов по свойству

В этом примере создаются объекты, имеющие свойства Имя, ID и рабочий набор (WS) объектов процессов.

Get-Process | Select-Object -Property ProcessName, Id, WS

Пример 2. Выбор объектов по свойству и форматирование результатов

В этом примере получаются сведения о модулях, используемых процессами на компьютере. Он использует командлет Get-Process для загрузки процесса на компьютер.

Он использует командлет Select-Object для вывода массива экземпляров [System.Diagnostics.ProcessModule], содержащихся в свойстве Modules каждого System.Diagnostics.Process, выводимые командой Get-Process.

Параметр Property командлета Select-Object выбирает имена процессов. Это добавляет ProcessName NoteProperty к каждому экземпляру [System.Diagnostics.ProcessModule] и заполняет его значением ProcessName< текущего процесса. свойство.

Наконец, командлет Format-List используется для отображения имени и модулей каждого процесса в списке.

Get-Process Explorer |
    Select-Object -Property ProcessName -ExpandProperty Modules |
    Format-List

ProcessName       : explorer
ModuleName        : explorer.exe
FileName          : C:\WINDOWS\explorer.exe
BaseAddress       : 140697278152704
ModuleMemorySize  : 3919872
EntryPointAddress : 140697278841168
FileVersionInfo   : File:             C:\WINDOWS\explorer.exe
                    InternalName:     explorer
                    OriginalFilename: EXPLORER.EXE.MUI
                    FileVersion:      10.0.17134.1 (WinBuild.160101.0800)
                    FileDescription:  Windows Explorer
                    Product:          Microsoft Windows Operating System
                    ProductVersion:   10.0.17134.1
...

Пример 3. Выбор процессов, использующих больше всего памяти

В этом примере получены пять процессов, которые используют больше всего памяти. Командлет Get-Process получает процессы на компьютере. Командлет Sort-Object сортирует процессы в соответствии с использованием памяти (рабочего набора), а командлет Select-Object выбирает только пять последних членов результирующего массива объектов.

Параметр Wait не требуется в командах, включающих командлет Sort-Object, поскольку Sort-Object обрабатывает все объекты, а затем возвращает коллекцию. Оптимизация Select-Object доступна только для команд, которые возвращают объекты по отдельности по мере их обработки.

Get-Process | Sort-Object -Property WS | Select-Object -Last 5

Handles  NPM(K)    PM(K)      WS(K) VS(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
2866     320       33432      45764   203   222.41   1292 svchost
577      17        23676      50516   265    50.58   4388 WINWORD
826      11        75448      76712   188    19.77   3780 Ps
1367     14        73152      88736   216    61.69    676 Ps
1612     44        66080      92780   380   900.59   6132 INFOPATH

Пример 4. Выбор уникальных символов из массива

В этом примере используется параметр Unique Select-Object для получения уникальных символов из массива символов.

"a","b","c","a","A","a" | Select-Object -Unique

a
b
c
A

Пример 5: Использование `-Unique` с другими параметрами

Параметр Unique фильтрует значения после применения других параметров Select-Object. Например, если вы используете параметр First для выбора первого количества элементов в массиве, параметр Unique применяется только к выбранным значениям, а не ко всему массиву.

"a","a","b","c" | Select-Object -First 2 -Unique

a

В этом примере First выбирает "a","a" в качестве первых двух элементов массива. Unique применяется к "a","a" и возвращает a в качестве уникального значения.

Пример 6. Выбор уникальных строк с помощью параметра «-CaseInsensitivity».

В этом примере используются сравнения без учета регистра для получения уникальных строк из массива строк.

"aa", "Aa", "Bb", "bb" | Select-Object -Unique -CaseInsensitive

aa
Bb

Пример 7. Выбор самых новых и самых старых событий в журнале событий.

В этом примере получаются первое (самое новое) и последнее (самое старое) события в журнале событий Windows PowerShell.

Get-WinEvent получает все события из журнала Windows PowerShell и сохраняет их в переменной $a. Затем $a передается по конвейеру командлету Select-Object. Команда Select-Object использует параметр Index для выбора событий из массива событий в переменной $a. Индекс первого события равен 0. Индекс последнего события равен количеству элементов в $a минус 1.

$a = Get-WinEvent -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($a.count - 1)

Пример 8. Выбрать все объекты, кроме первого.

В этом примере создается новый сеанс PSSession на каждом из компьютеров, перечисленных в файлах Servers.txt, за исключением первого.

Select-Object выбирает все компьютеры, кроме первого, в списке имен компьютеров. Результирующий список компьютеров задается как значение параметра ComputerName командлета New-PSSession.

New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)

Пример 9. Переименуйте файлы и выберите несколько для просмотра.

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

Get-ChildItem использует динамический параметр ReadOnly для получения файлов, доступных только для чтения. Полученные файлы передаются командлету Rename-Item, который переименовывает файл. Он использует параметр PassThru Rename-Item для отправки переименованных файлов в командлет Select-Object, который выбирает первые 5 файлов для отображения.

Параметр Wait Select-Object не позволяет PowerShell остановить командлет Get-ChildItem после того, как он получит первые пять текстовых файлов, доступных только для чтения. Без этого параметра будут переименованы только первые пять файлов, доступных только для чтения.

Get-ChildItem *.txt -ReadOnly |
    Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
    Select-Object -First 5 -Wait

Пример 10. Покажите тонкости параметра -ExpandProperty.

В этом примере показаны тонкости параметра ExpandProperty.

Обратите внимание, что сгенерированные выходные данные представляли собой массив экземпляров [System.Int32]. Экземпляры соответствуют стандартным правилам форматирования Представления вывода. Это справедливо для любых расширенных свойств. Если выводимые объекты имеют определенный стандартный формат, расширенное свойство может быть не видно.

# Create a custom object to use for the Select-Object example.
$object = [pscustomobject]@{Name="CustomObject";Expand=@(1,2,3,4,5)}
# Use the ExpandProperty parameter to Expand the property.
$object | Select-Object -ExpandProperty Expand -Property Name

1
2
3
4
5

# The output did not contain the Name property, but it was added successfully.
# Use Get-Member to confirm the Name property was added and populated.
$object | Select-Object -ExpandProperty Expand -Property Name | Get-Member

TypeName: System.Int32

Name        MemberType   Definition
----        ----------   ----------
CompareTo   Method       int CompareTo(System.Object value), int CompareTo(int value), ...
Equals      Method       bool Equals(System.Object obj), bool Equals(int obj), bool IEq...
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
GetTypeCode Method       System.TypeCode GetTypeCode(), System.TypeCode IConvertible.Ge...
ToBoolean   Method       bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte      Method       byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar      Method       char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime  Method       datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal   Method       decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble    Method       double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16     Method       int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32     Method       int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64     Method       long IConvertible.ToInt64(System.IFormatProvider provider)
ToSByte     Method       sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle    Method       float IConvertible.ToSingle(System.IFormatProvider provider)
ToString    Method       string ToString(), string ToString(string format), string ToS...
ToType      Method       System.Object IConvertible.ToType(type conversionType, System...
ToUInt16    Method       uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32    Method       uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64    Method       uint64 IConvertible.ToUInt64(System.IFormatProvider provider)
Name        NoteProperty string Name=CustomObject

Пример 11. Создание пользовательских свойств объектов

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

$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject

MyCustomProperty
----------------
New Custom Property

Пример 12. Создайте вычисляемые свойства для каждого InputObject.

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

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

# Create a calculated property called $_.StartTime.DayOfWeek
Get-Process | Select-Object -Property ProcessName,{$_.StartTime.DayOfWeek}

ProcessName  $_.StartTime.DayOfWeek
----         ----------------------
alg                       Wednesday
ati2evxx                  Wednesday
ati2evxx                   Thursday
...

# Add a custom property to calculate the size in KiloBytes of each FileInfo
# object you pass in. Use the pipeline variable to divide each file's length by
# 1 KiloBytes
$size = @{label="Size(KB)";expression={$_.length/1KB}}
# Create an additional calculated property with the number of Days since the
# file was last accessed. You can also shorten the key names to be 'l', and 'e',
# or use Name instead of Label.
$days = @{l="Days";e={((Get-Date) - $_.LastAccessTime).Days}}
# You can also shorten the name of your label key to 'l' and your expression key
# to 'e'.
Get-ChildItem $PSHOME -File | Select-Object Name, $size, $days

Name                        Size(KB)        Days
----                        --------        ----
Certificate.format.ps1xml   12.5244140625   223
Diagnostics.Format.ps1xml   4.955078125     223
DotNetTypes.format.ps1xml   134.9833984375  223

Пример 13. Выбор ключей хеш-таблицы без использования вычисляемых свойств.

Начиная с PowerShell 6, Select-Object поддерживает выбор ключей ввода hashtable в качестве свойств. В следующем примере выбираются ключи weight и name во входной хэш-таблице и отображаются выходные данные.

@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight

name weight
---- ------
a         7

Пример 14: ExpandProperty изменяет исходный объект

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

PS> $object = [PSCustomObject]@{
    name = 'USA'
    children = [PSCustomObject]@{
        name = 'Southwest'
    }
}
PS> $object

name children
---- --------
USA  @{name=Southwest}

# Use the ExpandProperty parameter to expand the children property
PS> $object | Select-Object @{n="country"; e={$_.name}} -ExpandProperty children

name      country
----      -------
Southwest USA

# The original object has been altered
PS> $object

name children
---- --------
USA  @{name=Southwest; country=USA}

Как видите, свойство country было добавлено к объекту children после использования параметра ExpandProperty.

Пример 15. Создайте новый объект с расширенными свойствами без изменения входного объекта.

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

PS> $object = [PSCustomObject]@{
    name = 'USA'
    children = [PSCustomObject]@{
        name = 'Southwest'
    }
}
PS> $object

name children
---- --------
USA  @{name=Southwest}

# Create a new object with selected properties
PS> $newobject = [PSCustomObject]@{
    country = $object.name
    children = $object.children
}

PS> $newobject

country children
------- --------
USA     @{name=Southwest}

# $object remains unchanged
PS> $object

name children
---- --------
USA  @{name=Southwest}

Параметры

-CaseInsensitive

По умолчанию, когда вы используете параметр Unique, командлет использует сравнения с учетом регистра. При использовании этого параметра командлет использует сравнения без учета регистра.

Этот параметр был добавлен в PowerShell 7.4.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-ExcludeProperty

Указывает свойства, которые этот командлет исключает из операции. Подстановочные знаки разрешены.

Начиная с PowerShell 6, для работы ExcludeProperty больше не требуется включать параметр Property.

Тип :

String[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

True

-ExpandProperty

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

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

В любом случае Тип выходных объектов соответствует Тип расширенного свойства.

Примечание

При использовании ExpandProperty возникает побочный эффект. Select-Object добавляет выбранные свойства к исходному объекту как элементы NoteProperty.

Если указан параметр Property, Select-Object пытается добавить каждое выбранное свойство как NoteProperty к каждому выводимому объекту.

Предупреждение

Если вы получаете сообщение об ошибке, сообщающее, что свойство невозможно обработать, поскольку свойство с таким именем уже существует, учтите следующее. Обратите внимание, что при использовании ExpandProperty Select-Object не может заменить существующее свойство. Это означает:

  • Если развернутый объект имеет свойство с таким же именем, команда возвращает ошибку.
  • Если объект Выбранный имеет свойство с тем же именем, что и свойство объекта Расширенный, команда возвращает ошибку.
Тип :

String

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-First

Указывает количество объектов, которые необходимо выбрать из начала массива входных объектов.

Тип :

Int32

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Index

Выбирает объекты из массива на основе значений их индексов. Введите индексы в виде списка, разделенного запятыми. Индексы в массиве начинаются с 0, где 0 представляет первое значение, а (n-1) — последнее значение.

Тип :

Int32[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-InputObject

Указывает объекты для отправки командлету через конвейер. Этот параметр позволяет передавать объекты по конвейеру в Select-Object.

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

Тип :

PSОбъект

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-Last

Указывает количество объектов, которые необходимо выбрать из конца массива входных объектов.

Тип :

Int32

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Property

Указывает свойства для выбора. Эти свойства добавляются как элементы NoteProperty к выходным объектам. Подстановочные знаки разрешены. Если входной объект не имеет указанного свойства, значение нового NoteProperty устанавливается равным $null.

Значение параметра Property может быть новым вычисляемым свойством. Чтобы создать вычисляемое свойство, используйте хеш-таблицу.

Действительные ключи:

  • Имя (или метка) — <string>
  • Выражение — <string> или <script; block>

Дополнительные сведения см. в разделе about_Calculated_Properties.

Тип :

Object[]

Позиция:

0

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

True

-Skip

Пропускает (не выбирает) указанное количество элементов. По умолчанию параметр Пропустить отсчитывает от начала коллекции объектов. Если команда использует параметр Last, отсчет ведется с конца коллекции.

В отличие от параметра Index, отсчет которого начинается с 0, параметр Skip начинается с 1.

Начиная с PowerShell 7.4, вы можете использовать параметр Skip с параметром SkipLast, чтобы пропускать элементы как с начала, так и с конца коллекции.

Тип :

Int32

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-SkipIndex

Пропускает (не выбирает) объекты из массива на основе значений их индексов. Введите индексы в виде списка, разделенного запятыми. Индексы в массиве начинаются с 0, где 0 представляет первое значение, а (n-1) — последнее значение.

Этот параметр был введен в Windows PowerShell 6.0.

Тип :

Int32[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-SkipLast

Пропускает (не выбирает) указанное количество элементов из конца списка или массива. Работает так же, как использование Skip вместе с параметром Last.

В отличие от параметра Index, отсчет которого начинается с 0, параметр SkipLast начинается с 1.

Начиная с PowerShell 7.4, вы можете использовать параметр Skip с параметром SkipLast, чтобы пропускать элементы как с начала, так и с конца коллекции.

Тип :

Int32

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Unique

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

Уникальный выбирает значения после применения других параметров фильтрации.

Этот параметр чувствителен к регистру. В результате строки, отличающиеся только регистром символов, считаются уникальными. Добавьте параметр CaseInsensitivity, чтобы выполнять сравнения без учета регистра.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Wait

Указывает, что командлет отключает оптимизацию. PowerShell запускает команды в том порядке, в котором они появляются в командном конвейере, и позволяет им генерировать все объекты. По умолчанию, если вы включаете команду Select-Object с параметрами First или Index в командный конвейер, PowerShell останавливает команду, генерирующую объекты, как только будет сгенерировано выбранное количество объектов.

Этот параметр был введен в Windows PowerShell 3.0.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

PSObject

Вы можете передавать объекты в этот командлет.

Выходы

PSObject

Этот командлет возвращает входные объекты только с выбранными свойствами.

Примечания

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

  • Все платформы:

      select

Функция оптимизации Select-Object доступна только для команд, которые записывают объекты в конвейер по мере их обработки. Это не влияет на команды, которые буферизуют обработанные объекты и записывают их как коллекцию. Немедленная запись объектов — это лучшая практика проектирования командлетов. Дополнительную информацию см. в разделе Запись отдельных записей в конвейер в Настоятельно рекомендуемых рекомендациях по разработке.