Поделиться через


Select-Object

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

Синтаксис

Select-Object
      [[-Property] <Object[]>]
      [-InputObject <psobject>]
      [-ExcludeProperty <string[]>]
      [-ExpandProperty <string>]
      [-Unique]
      [-Last <int>]
      [-First <int>]
      [-Skip <int>]
      [-Wait]
      [<CommonParameters>]
Select-Object
      [[-Property] <Object[]>]
      [-InputObject <psobject>]
      [-ExcludeProperty <string[]>]
      [-ExpandProperty <string>]
      [-Unique]
      [-SkipLast <int>]
      [<CommonParameters>]
Select-Object
      [-InputObject <psobject>]
      [-Unique]
      [-Wait]
      [-Index <int[]>]
      [<CommonParameters>]

Описание

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

Чтобы выбрать объекты из коллекции, используйте First, Last, Unique, Skipи Index. Чтобы выбрать свойства объекта, используйте параметр свойства. При выборе свойств Select-Object возвращает новые объекты, имеющие только указанные свойства.

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

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

Примеры

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

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

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

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

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

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

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

Наконец, 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 выбирает только последние пять членов результирующего массива объектов.

Параметр ожидания не требуется в командах, которые включают командлет 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. Выбор уникальных символов из массива

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

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

a
b
c

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

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

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

a

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример 9. Отображение сведений о -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

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

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

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

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

Пример 11. Создание вычисляемых свойств для каждого объекта InputObject

В этом примере показано использование Select-Object для добавления вычисляемых свойств в входные данные. Передача ScriptBlock параметру свойства приводит к тому, что 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

Пример 12. Выбор ключей хэш-файла с вычисляемыми свойствами

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

@{ name = 'a' ; weight = 7 } | Select-Object -Property @(
    @{ label = 'Name' ; expression = { $_.name } }
    @{ label = 'Weight' ; expression = { $_.weight } }
)

Name Weight
---- ------
a         7

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

В этом примере демонстрируется побочный эффект использования параметра ExpandProperty. При использовании ExpandPropertySelect-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}

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

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

Можно избежать побочных эффектов использования параметра 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}

Параметры

-ExcludeProperty

Указывает свойства, которые этот командлет исключает из операции. Разрешены подстановочные знаки. Этот параметр действует только в том случае, если команда также включает параметр Property.

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-ExpandProperty

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

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

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

Заметка

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

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

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

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

  • Если развернутый объект имеет свойство того же имени, команда возвращает ошибку.
  • Если объект Selected имеет свойство того же имени, что и свойство объекта Expanded, команда возвращает ошибку.
Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-First

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

Тип:Int32
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Index

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

Тип:Int32[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-InputObject

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

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

Тип:PSObject
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Last

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

Тип:Int32
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Property

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

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

Допустимые ключи:

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

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

Тип:Object[]
Position:0
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-Skip

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

В отличие от параметра index, который начинает подсчет от 0, параметр Skip начинается с 1.

Тип:Int32
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-SkipLast

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

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

Тип:Int32
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Unique

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

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

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

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Wait

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

Этот параметр появился в Windows PowerShell 3.0.

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

PSObject

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

Выходные данные

PSObject

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

Примечания

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

  • select

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