Select-Object
Выбирает объекты или свойства объекта.
Синтаксис
DefaultParameter (по умолчанию)
Select-Object
[[-Property] <Object[]>]
[-InputObject <PSObject>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
SkipLastParameter
Select-Object
[[-Property] <Object[]>]
[-InputObject <PSObject>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Skip <Int32>]
[-SkipLast <Int32>]
[<CommonParameters>]
IndexParameter
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
SkipIndexParameter
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-SkipIndex <Int32[]>]
[<CommonParameters>]
Описание
Командлет Select-Object
выбирает указанные свойства объекта или набора объектов. Он также может выбирать уникальные объекты, указанное число объектов или объекты в указанной позиции в массиве.
Чтобы выбрать объекты из коллекции, используйте First, Last, Unique, Skipи Index. Чтобы выбрать свойства объекта, используйте параметр свойства 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
.
Параметр свойства командлета Select-Object
выбирает имена процессов. Это добавляет ProcessName
NoteProperty к каждому экземпляру [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
A
Пример 5. Использование "-Unique" с другими параметрами
Значение параметра Unique фильтрует значения после применения других параметров Select-Object
. Например, если вы используете параметр First для выбора первого числа элементов в массиве, уникальные применяются только к выбранным значениям, а не ко всему массиву.
"a","a","b","c" | Select-Object -First 2 -Unique
a
В этом примере First выбирает "a","a"
в качестве первых 2 элементов в массиве.
уникальный применяется к "a","a"
и возвращает a
в качестве уникального значения.
Пример 6. Выбор уникальных строк с помощью параметра -CaseInsensitive
В этом примере используются нечувствительные сравнения регистров для получения уникальных строк из массива строк.
"aa", "Aa", "Bb", "bb" | Select-Object -Unique -CaseInsensitive
aa
Bb
Пример 7. Выбор новых и старейших событий в журнале событий
Этот пример получает первые (новейшие) и последние (старые) события в журнале событий Windows PowerShell.
Get-WinEvent
получает все события в журнале Windows PowerShell и сохраняет их в переменной $a
.
Затем $a
передаются в командлет Select-Object
. Команда $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
, который переименовывает файл. Он использует параметр 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
Пример 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
для добавления вычисляемых свойств в входные данные. Передача $_
для ссылки на текущий объект в конвейере.
По умолчанию 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
поддерживает выбор ключей хэшируемых входных данных в качестве свойств. В следующем примере выбираются и name
ключи weight
для входного хэш-файла и отображаются выходные данные.
@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight
name weight
---- ------
a 7
Пример 14. 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.
Пример 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
По умолчанию при использовании уникального параметра командлет использует сравнения с учетом регистра. При использовании этого параметра командлет использует нечувствительные сравнения регистра.
Этот параметр добавлен в PowerShell 7.4.
Свойства параметра
Тип: | SwitchParameter |
Default value: | False |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-ExcludeProperty
Указывает свойства, которые этот командлет исключает из операции. Подстановочные символы разрешены.
Начиная с PowerShell 6, больше не требуется включать параметр свойства для функции ExcludeProperty .
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | True |
DontShow: | False |
Наборы параметров
DefaultParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
SkipLastParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-ExpandProperty
Указывает свойство для выбора и указывает, что необходимо выполнить попытку развернуть это свойство. Если конвейер входного объекта не имеет имени свойства, Select-Object
возвращает ошибку.
- Если указанное свойство является массивом, каждое значение массива включается в выходные данные.
- Если указанное свойство является объектом, свойства объектов развертываются для каждого InputObject
В любом случае выходные объекты Type соответствуют типа развернутого свойства.
Замечание
При использовании ExpandPropertyсуществует побочный эффект.
Select-Object
добавляет выбранные свойства в исходный объект как элементы NoteProperty.
Если указан параметр свойства , Select-Object
пытается добавить каждое выбранное свойство в качестве NoteProperty к каждому выходному объекту.
Предупреждение
Если вы получаете сообщение об ошибке, что свойство не может быть обработано, так как свойство с этим именем уже существует, рассмотрите следующее. Обратите внимание, что при использовании ExpandPropertySelect-Object
не удается заменить существующее свойство. Это означает:
- Если развернутый объект имеет свойство того же имени, команда возвращает ошибку.
- Если объект Selected имеет свойство того же имени, что и свойство объекта Expanded, команда возвращает ошибку.
Свойства параметра
Тип: | String |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
DefaultParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
SkipLastParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-First
Указывает количество объектов, которые нужно выбрать в начале массива входных объектов.
Свойства параметра
Тип: | Int32 |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
DefaultParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Index
Выбирает объекты из массива на основе их значений индекса. Введите индексы в разделенном запятыми списке. Индексы в массиве начинаются с 0, где 0 представляет первое значение и (n-1) представляет последнее значение.
Свойства параметра
Тип: | Int32[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
IndexParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-InputObject
Указывает объекты для отправки командлету через конвейер. Этот параметр позволяет передавать объекты в Select-Object
.
При передаче объектов в параметр InputObject вместо использования конвейера Select-Object
обрабатывает InputObject как один объект, даже если значение является коллекцией. Рекомендуется использовать конвейер при передаче коллекций в Select-Object
.
Свойства параметра
Тип: | PSObject |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | True |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Last
Указывает количество объектов, которые нужно выбрать в конце массива входных объектов.
Свойства параметра
Тип: | Int32 |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
DefaultParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Property
Указывает свойства, которые нужно выбрать. Эти свойства добавляются как NoteProperty членов в выходные объекты. Подстановочные символы разрешены. Если входной объект не имеет именованного свойства, значение нового NoteProperty имеет значение $null
.
Значение параметра свойства
Допустимые ключи:
- Имя (или метка) —
<string>
- Выражение:
<string>
или<script block>
См. раздел about_Calculated_Propertiesдля получения дополнительных сведений.
Свойства параметра
Тип: | Object[] |
Default value: | None |
Поддерживаются подстановочные знаки: | True |
DontShow: | False |
Наборы параметров
DefaultParameter
Position: | 0 |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
SkipLastParameter
Position: | 0 |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Skip
Пропускает (не выбирает) указанное количество элементов. По умолчанию пропускать число параметров с начала коллекции объектов. Если команда использует параметр Last, он подсчитывается в конце коллекции.
В отличие от параметра index, который начинает подсчет от 0, параметр Skip начинается с 1.
Начиная с PowerShell 7.4, можно использовать параметр Skip с параметром SkipLast , чтобы пропустить элементы из начала и конца коллекции.
Свойства параметра
Тип: | Int32 |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
DefaultParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-SkipIndex
Пропускает (не выбирает) объекты из массива на основе их значений индекса. Введите индексы в разделенном запятыми списке. Индексы в массиве начинаются с 0, где 0 представляет первое значение и (n-1) представляет последнее значение.
Этот параметр появился в Windows PowerShell 6.0.
Свойства параметра
Тип: | Int32[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
SkipIndexParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-SkipLast
Пропускает (не выбирает) указанное количество элементов из конца списка или массива. Работает так же, как использование пропускать вместе с параметром Last.
В отличие от параметра Index, который начинает подсчет от 0, параметр SkipLast начинается с 1.
Начиная с PowerShell 7.4, можно использовать параметр Skip с параметром SkipLast , чтобы пропустить элементы из начала и конца коллекции.
Свойства параметра
Тип: | Int32 |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
SkipLastParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Unique
Указывает, что если подмножество входных объектов имеет идентичные свойства и значения, следует выбрать только один элемент подмножества.
Unique выбирает значения после применения других параметров фильтрации.
Этот параметр чувствителен к регистру. В результате строки, отличающиеся только в регистре символов, считаются уникальными. Добавьте параметр CaseInsensitive для выполнения сравнения без учета регистра.
Свойства параметра
Тип: | SwitchParameter |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Wait
Указывает, что командлет отключает оптимизацию. PowerShell выполняет команды в том порядке, в котором они отображаются в командном конвейере и позволяют создавать все объекты. По умолчанию при включении команды Select-Object
с параметрами First или index index в конвейере команд PowerShell останавливает команду, которая создает объекты сразу после создания выбранного числа объектов.
Этот параметр появился в Windows PowerShell 3.0.
Свойства параметра
Тип: | SwitchParameter |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
DefaultParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
IndexParameter
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
PSObject
Объекты можно передать в этот командлет.
Выходные данные
PSObject
Этот командлет возвращает входные объекты только с выбранными свойствами.
Примечания
PowerShell включает следующие псевдонимы для Select-Object
:
- Все платформы:
select
Функция оптимизации Select-Object
доступна только для команд, которые записывают объекты в конвейер по мере их обработки. Он не влияет на команды, которые буферизировали объекты и записывают их как коллекцию. Написание объектов немедленно — это рекомендация по проектированию командлетов. Дополнительные сведения см. в разделе Записи отдельных записей в конвейер в настоятельно рекомендуемых рекомендаций по разработке.