Измерение объектов
Командлет Measure-Object может посчитать количество входящих объектов, а также измерить составные значения числовых свойств объектов. В качестве самого простого примера его работы вы можете просто посчитать количество объектов с помощью команды:
Get-Process | Measure-Object
Обратите внимание, что Measure-Object вбирает в себя входящие объекты, что означает, что, поступив в него, они больше не находятся в конвейере. В качестве выходных данных Measure-Object выступают какие-либо числовые значения объектов, а не процессы. Вы можете убедиться в этом, передав выходные данные командлету Get-Member:
Get-Process | Measure-Object | Get-Member
Это означает, что после обработки командлетом Measure-Object все процессы теряются, остаются лишь числовые показатели их значений. На практике Measure-Object обычно является последним командлетом в цепочке, поскольку его выходные данные вы вряд ли захотите передать куда-то еще.
Помимо простого подсчета объектов, Measure-Object может создавать составные значения для числовых свойств объектов, например, таких как виртуальная память (VM). Для этого необходимо указать одно или несколько составных значений и имя свойства, которое вы хотите измерить:
Get-Process | Measure-Object –property VM –average –sum –minimum –maximum
Результатом будет комплексное числовое значение. Другие опции Measure-Object можно найти в справочнике (Help).
Весьма распространенное явление – сокращать имена параметров при печати, например, вводить min вместо minimum. Это обычно срабатывает хорошо, однако, не забывайте, что вы вводите просто урезанное слово, а не его аббревиатуру. Например, -aver можно набрать вместо –average (средний), в то время как –avg не будет работать, хотя это распространенная аббревиатура в английском языке.
Выбор объектов и свойств
Командлет Select-Object имеет две четких цели, то есть, может использоваться двумя способами. Эти два способа могут использоваться как одновременно, так и по отдельности, в зависимости от ваших потребностей.
Выбор определенных объектов:
Вы можете использовать Select-Object использовать для выбора подмножества объектов в конвейере, применяя такие его параметры как -first, -last и –skip:
• -first – определяет количество объектов, считая с начала, которые нужно выбрать.
• -last - определяет количество объектов, считая с начала, которые нужно выбрать.
• -skip – пропускает указанное количество объектов и отображает оставшиеся.
Например, чтобы выбрать только первые 10 объектов, запустите команду:
Get-Process | Select-Object –first 10
Чтобы выбрать 10 процессов, занимающих больше всего физической памяти:
Get-Process | Sort-Object PM | Select-Object –last 10
При таком использовании командлет Select-Object выпускает те же самые объекты, что были получены им в качестве входящих данных, однако, их количество может быть меньше. Убедиться в этом можно, передав данные из Select-Object в Get-Member:
Get-Process | Select-Object –first 10 | Get-Member
Выбор определенных свойств объектов:
Select-Object может также использоваться для ограничения свойств исходящих объектов. Например, если вы работаете с процессами и хотите вывести только данные о свойствах ID, VM и PM, вы можете использовать Select-Object, чтобы отсеять все остальные свойства:
Get-Process | Select-Object name,ID,VM,PM
Однако при таком использовании вы вынуждаете Select-Object производить новый тип объектов, отличных от входящих данных. Входящие объекты забираются командлетом, но не выпускаются обратно в конвейер. В этом можно убедиться, запустив команду:
Get-Process | Select-Object name,ID,VM,PM | Get-Member
Это происходит каждый раз, когда вы уточняете список свойств с помощью Select-Object. Эта техника может также использоваться с применением параметров –first, -skip и –last, но поскольку это список свойств, а не список объектов, Select-Object будет выдавать в качестве исходящих данных видоизмененные объекты:
Get-Process | Select-Object name,ID,VM,PM –first 10 | Get-Member
Select – это псевдоним, который используется по умолчанию для командлета Select-Object, поэтому, его можно указывать вместо полного названия:
Get-Process | Select name,id –first 10
Создание новых свойств
Select-Object может также использоваться для придания новых, пользовательских свойств объектам. Это может быть просто новое имя для существующего свойства, например, вы можете добавить свойство ComputerName объекту, который уже имеет имя MachineName. С другой стороны, пользовательские свойства могут включать в себя сложные вычисления, например, такое свойство как PercentageFreeSpace (свободное место в процентах) для объекта, который уже обладает свойствами TotalSize (общий размер) и FreeSpace (свободное место).
Для придания объекту новых свойств, вам необходимо предварительно составить хеш-таблицу. Более подробную информацию о хеш-таблицах вы найдете в последующих разделах курса, а пока достаточно просто запомнить корректный синтаксис:
Get-Process | Select name,vm,pm,@{Label="TotalMemory"; Expression={$_.vm + $_.pm}}
Как это работает:
• Командлет Select-Object получает команду выбрать свойства VM и PM, которыми данный объект уже обладает.
• Несмотря на то, что действия Select-Object не зависят от регистра клавиатуры, он запоминает, какой регистр был использован для того или иного имени в последний раз. В частности, в данном случае свойство vm будет выведено на экран строчными буквами, поскольку строчные буквы использовались при написании команды.
• Новое свойство имеет имя (ярлык) TotalMemory (общая память). Значение этого свойства высчитывается исходя из значений существующих свойств VM и PM. Элемент Expression в командной строке определяет значение нового свойства как сумму значений двух существующих свойств - VM и PM. Переменная $_ является структурным нулем, который относится к «текущему объекту».
Вы можете относиться к элементу $_ как к пустой ячейке в таблице, которые вы, вероятно, встречали на бумажных бланках. Оболочка автоматически заполняет бланк, вставляя по умолчанию имя текущего объекта, а значит вручную его вписывать необязательно – вместо этого сюда вставляется символ структурного нуля. $_ может использоваться только в конкретных сценариях, в которых оболочка будет его искать. Блок Expression как раз относится к таким сценариям.
|