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
[-InputObject <psobject>]
[-Unique]
[-SkipIndex <int[]>]
[<CommonParameters>]
Описание
Командлет Select-Object
выбирает указанные свойства объекта или набора объектов. Он также может выбирать уникальные объекты, указанное число объектов или объекты в указанной позиции в массиве.
Чтобы выбрать объекты из коллекции, используйте параметры First, Last, Unique, Skip и Index. Чтобы выбрать свойства объектов, используйте параметр Property. При выборе свойств возвращает новые объекты, Select-Object
имеющие только указанные свойства.
Начиная с Windows PowerShell 3.0, включает функцию оптимизации, Select-Object
которая не позволяет командам создавать и обрабатывать объекты, которые не используются.
При использовании Select-Object
с параметрами First или Index в командном конвейере PowerShell останавливает команду, которая создает объекты, как только будет достигнуто выбранное число объектов. Чтобы отключить эту функцию оптимизации, используйте параметр Wait.
Примеры
Пример 1. Выбор объектов по свойству
В этом примере создаются объекты с свойствами Name, 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
выбирает имена процессов. При этом свойство NoteProperty добавляется ProcessName
к каждому [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
Пример 5. Использование "-Unique" с другими параметрами
Уникальный параметр фильтрует значения после применения других Select-Object
параметров. Например, если вы используете параметр First для выбора первого числа элементов в массиве, значение Unique применяется только к выбранным значениям, а не ко всему массиву.
"a","a","b","c" | Select-Object -First 2 -Unique
a
В этом примере параметр First выбирает в качестве первых "a","a"
2 элементов в массиве. Уникальный применяется к "a","a"
и возвращается a
в качестве уникального значения.
Пример 6. Выбор новых и самых старых событий в журнале событий
Этот пример возвращает первое (самое новое) и последнее (самое старое) события в журнале событий 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)
Пример 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
командлет , который переименовывает файл. Он использует параметр PassThru для Rename-Item
отправки переименованных файлов в Select-Object
командлет, который выбирает первые 5 для отображения.
Параметр Select-Object
Wait не позволяет 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. Create пользовательских свойств объектов
В следующем примере показано использование Select-Object
для добавления настраиваемого свойства к любому объекту .
При указании имени свойства, которое не существует, Select-Object
создает это свойство как NoteProperty для каждого переданного объекта.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Пример 11. Create вычисляемых свойств для каждого объекта InputObject
В этом примере показано использование Select-Object
для добавления вычисляемых свойств во входные данные. Передача ScriptBlock в параметр Property приводит Select-Object
к вычислению выражения для каждого переданного объекта и добавлению результатов в выходные данные. В ScriptBlock можно использовать $_
переменную для ссылки на текущий объект в конвейере.
По умолчанию Select-Object
использует строку ScriptBlock в качестве имени свойства. С помощью хэш-столбца можно пометить выходные данные 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. Выбор ключей хэш-сводки без использования вычисляемых свойств
Начиная с PowerShell 6, Select-Object
поддерживает выбор ключей входных данных хэш-схемы в качестве свойств. В следующем примере выбираются ключи weight
и name
во входной хэш-сводке и отображаются выходные данные.
@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight
name weight
---- ------
a 7
Параметры
-ExcludeProperty
Указывает свойства, которые этот командлет исключает из операции. Разрешено использовать подстановочные знаки.
Начиная с PowerShell 6, для работы ExcludeProperty больше не требуется включать параметр Property.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-ExpandProperty
Задает свойство, которое нужно выбрать, и указывает, что нужно попытаться расширить его. Если конвейер входных объектов не имеет свойства с именем, Select-Object
возвращает ошибку.
- Если указанное свойство является массивом, каждое значение массива включается в выходные данные.
- Если указанное свойство является объектом , свойства объектов разворачиваются для каждого объекта InputObject.
В любом случае тип выходных объектов соответствует типу развернутого свойства.
Если указан параметр Property , Select-Object
пытается добавить каждое выбранное свойство в качестве свойства NoteProperty к каждому выходному объекту.
Предупреждение
Если появляется сообщение об ошибке, указывающее, что свойство не может быть обработано, так как свойство с таким именем уже существует, рассмотрите следующее. Обратите внимание, что при использовании ExpandPropertySelect-Object
не может заменить существующее свойство. Это означает следующее:
- Если развернутый объект имеет свойство с тем же именем, команда возвращает ошибку.
- Если объект Selected имеет свойство с тем же именем, что и свойство развернутого объекта, команда возвращает ошибку.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-First
Указывает число объектов, которое нужно выбрать с начала массива входных объектов.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Index
Выбирает объекты из массива в соответствии со значениями индекса. Введите индексы в виде разделенного запятыми списка. Индексы массива начинаются с нуля, то есть 0 представляет первое значение, а (n-1) — последнее значение.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Указывает объекты, которые необходимо передать в командлет по конвейеру. Этот параметр позволяет передавать объекты в Select-Object
.
При передаче объектов в параметр InputObject вместо использования конвейера Select-Object
обрабатывает InputObject как один объект, даже если значение является коллекцией. Рекомендуется использовать конвейер при передаче коллекций в Select-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Last
Указывает число объектов, которое нужно выбрать с конца массива входных объектов.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Указывает свойства, которые нужно выбрать. Эти свойства добавляются в выходные объекты в качестве элементов NoteProperty . Разрешено использовать подстановочные знаки. Если у входного объекта нет свойства с именем, для нового свойства NoteProperty устанавливается значение $null
.
Значение параметра Property может быть новым вычисляемым свойством. Чтобы создать вычисляемое свойство, используйте хэш-таблицу.
Допустимые разделы следующие:
- Имя (или метка) —
<string>
- Выражение —
<string>
или<script block>
Дополнительные сведения см. в разделе about_Calculated_Properties.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Skip
Пропускает (не выбирает) указанное количество элементов. По умолчанию параметр Skip учитывается с начала коллекции объектов . Если команда использует параметр Last , она отсчитывается от конца коллекции.
В отличие от параметра Index, значение которого отсчитывается от 0, параметр Skip начинается с единицы.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipIndex
Пропускает (не выбирает) объекты из массива на основе их значений индекса. Введите индексы в виде разделенного запятыми списка. Индексы массива начинаются с нуля, то есть 0 представляет первое значение, а (n-1) — последнее значение.
Этот параметр появился в Windows PowerShell 6.0.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipLast
Пропускает (не выбирает) указанное количество элементов в конце списка или массива. Работает так же, как использование параметра Skip вместе с параметром Last .
В отличие от параметра Index , который начинает подсчет с 0, параметр SkipLast начинается с 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Unique
Указывает, что если подмножество входных объектов имеет идентичные свойства и значения, следует выбрать только один член подмножества.
Уникальный выбирает значения после применения других параметров фильтрации.
Этот параметр чувствителен к регистру. Поэтому строки, которые отличаются только регистром символов, считаются уникальными.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Wait
Указывает, что командлет отключает оптимизацию. PowerShell выполняет команды в том порядке, в котором они отображаются в командном конвейере, и позволяет им создавать все объекты. По умолчанию, если вы включаете Select-Object
команду с параметрами First или Index в командный конвейер, PowerShell останавливает команду, которая создает объекты сразу после создания выбранного числа объектов.
Этот параметр впервые появился в Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
Объекты можно передать в этот командлет.
Выходные данные
Этот командлет возвращает входные объекты только с выбранными свойствами.
Примечания
PowerShell включает следующие псевдонимы для Select-Object
:
- Для всех платформ.
select
Функция оптимизации Select-Object
доступна только для команд, которые записывают объекты в конвейер по мере их обработки. Она не действует для команд, которые буферизуют обработанные объекты и записывают их в виде коллекции. При разработке командлетов рекомендуется немедленно записывать объекты. Дополнительные сведения см. в разделе Запись отдельных записей в конвейер в руководстве по настоятельно рекомендуемой разработке.