Командлет Select-Object позволяет выбрать только определенные свойства объектов в командах PowerShell. Select-Object может выбирать уникальные объекты, указанное количество объектов или объекты в указанной позиции в массиве. Кроме того, некоторые командлеты PowerShell выводят не все свойства объектов, и чтобы вывести значения дополнительных атрибутов, нужно использовать Select-Object.
Чтобы вывести все свойства объектов в PowerShell, нужно отправить их через pipe на командлет Select-Object (или его алиас Select). Сравните, как отличаются результаты двух следующих команд:
Get-Service -Name wuauserv
Get-Service -Name wuauserv | Select-Object -Property *
Знак * указывает, что нужно вывести все свойства объекта. Вы можете вывести значения только определенных атрибутов объекта, для этого их список нужно указать через запятую:
Get-Service -Name wuauserv | Select-Object Name,StartupType,BinaryPathName
Также можно вывести все атрибуты, кроме указанных:
Get-Service -Name wuauserv | Select-Object * -ExcludeProperty Description, DependentServices, DelayedAutoStart
Вы можете использовать Select-Object для добавления в вывод дополнительных колонок с новыми значениями. Например, вы хотите получить информацию о свободном пространстве на диске и сразу добавить дополнительный столбец с процентом свободного места:
Get-Volume | select -Property DriveLetter, @{Label='Free'; Expression = {[string]([int]($_.SizeRemaining/$_.Size*100)) + " %"}}
В этом примере значения в одном из столбцов в выводе были получены путем выполнения математической операции с другими атрибутами.
Если объект хранит несколько значений, вы можете вывести их всех с помощью параметра >ExpandProperty.
$myobject = [pscustomobject]@{Type='array'; collection=@(1,2,3,4,5)}
По умолчанию значение атрибута collection выводится в виде массива объектов.
Чтобы получит их значения, нужно выполнить команду:
$myobject | Select-Object -Property Type -ExpandProperty collection
С помощью параметров First и Last вы можете получить первый или последний элемент в массиве объектов. Например, следующая команда выведет один процесс, который использует больше всего RAM:
Get-Process | Sort-Object WS -Descending | Select-Object -First 1
Чтобы вывести топ 10 процессом по использованию CPU:
Get-Process | Sort-Object -Property CPU | Select-Object -Last 10
Также вы можете обратиться к элементам объекта с помощью параметра index (значения индексов начинаются с 0):
Get-Process | Sort-Object WS -Descending | Select-Object -Index 0
Если вам нужно выбрать первый и последний объект, можно использовать такую команду:
$logs= Get-WinEvent -LogName "Windows PowerShell"
$logs| Select-Object -Index 0, ($logs.count - 1)
С помощью параметра –Unique можно вывести только объекты с уникальными значениями:
Get-Process| select name -Unique
1 comment
Конструкция «$logs| Select-Object -Index 0, ($logs.count — 1)» неудачная. Ключ индекс используют если нужно вывести записи по диапазону (этот момент кстати не раскрыт), а вот если нужно только первый и последний элемент, то удобнее использовать в длинном формате через select «$logs| Select-Object -First 1 -Last 1», или в коротком через индексы массива «$logs[0,-1]».