Параметр -Property Powershell Select-Object - PullRequest
2 голосов
/ 22 июля 2011

Я озадачен некоторым поведением командлета Select-Object.Вот пример.

PS C:\> $object = get-item C:\windows\Temp
PS C:\> $time = $object.CreationTime
PS C:\> $time.GetType().FullName
System.DateTime
PS C:\> $result = Select-Object -InputObject $object -Property "CreationTime"
PS C:\> $result.GetType().FullName
System.Management.Automation.PSCustomObject
PS C:\>
PS C:\> $result.CreationTime.GetType().FullName
System.DateTime

Обратите внимание, что тип CreationTime - System.DateTime, но когда я выбираю его с помощью Select-Object, возвращаемый объект имеет тип System.Management.Automation.PSCustomObject.Это какой-то новый объект, который имеет CreationTime в качестве своего свойства.

Давайте рассмотрим справку для Select-Object, чтобы объяснить это.

СИНОПСИСВыбирает указанные свойства объекта или набора объектов ...

Это то, что я хотел, само свойство ... не какой-то объект со свойством.Но если мы будем читать дальше ...

ОПИСАНИЕ... Если вы используете Select-Object для выбора указанных свойств, он копирует значения этих свойств из входных объектов и создает новые объекты, которые имеют указанные свойства и скопированные значения.

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

Использование -ExpandProperty вместо -Property, кажется, дает само свойство

PS C:\> $result2 = Select-Object -InputObject $object -ExpandProperty "CreationTime"
PS C:\> $result2.GetType().FullName
System.DateTime

По какой причине -ExpandProperty делает это?Давайте посмотрим на его помощь:

-ExpandPropertyУказывает свойство для выбора ... Если свойство содержит объект, свойства этого объекта отображаются в выходных данных.

В этом случае свойство является объектом, и мы не получили«свойства этого объекта» мы получили только сам объект.

Может кто-нибудь сказать мне:

  1. Почему -ExpandProperty получает сам объект-свойство, когда помощь упоминает расширениемассивы и получение свойств свойства-объекта (не самого свойства-объекта)?Это где я довольно смущен.Я читаю это неправильно?Я чувствую, что для этого нужна еще одна итерация технического редактирования.
  2. Объект, который возвращается с "-Property", это полезно для чего-то?

Ответы [ 2 ]

4 голосов
/ 22 июля 2011

Чтобы развернуть ответ на вопрос № 1: Наиболее распространенное использование -expandproperty - это расширение свойства, являющегося массивом, на элементы массива, особенно при выполнении export-csv.

PS C:\> get-process lsass | select threads | convertto-csv -notype
"Threads"
"System.Diagnostics.ProcessThreadCollection"

Не очень полезно. Теперь используйте -expandproperty для этой коллекции потоков:

PS C:\> get-process lsass | select -expand threads | convertto-csv -notype

 "BasePriority","CurrentPriority","Id","IdealProcessor","PriorityBoostEnabled","PriorityLevel","PrivilegedProcessorTime"
 ,"StartAddress","StartTime","ThreadState","TotalProcessorTime","UserProcessorTime","WaitReason","ProcessorAffinity","Si
 te","Container"
 "9","10","572",,,,,"2000143616",,"Wait",,,"LpcReceive",,,
 "9","10","588",,,,,"2000143616",,"Wait",,,"UserRequest",,,
 "9","9","592",,,,,"2000143616",,"Wait",,,"UserRequest",,,
 "9","10","596",,,,,"0",,"Wait",,,"EventPairLow",,,
 "9","9","1404",,,,,"0",,"Wait",,,"UserRequest",,,
 "9","9","3896",,,,,"0",,"Wait",,,"EventPairLow",,,
 "9","9","848",,,,,"0",,"Wait",,,"EventPairLow",,,
 "9","11","6216",,,,,"2000143616",,"Wait",,,"UserRequest",,,
 "9","9","7924",,,,,"2000143616",,"Wait",,,"EventPairLow",,,
3 голосов
/ 22 июля 2011

Select-object (без -expandproperty) возвращает PSCustomObject с набором выбранных вами свойств. Это потому, что вы можете выбрать более одного свойства (и не можете ожидать, например, получить объект datetime для 2 свойств).

Ответ на вопрос № 2 заключается в том, что иногда лучше иметь объект с меньшим количеством свойств и терять методы. Кроме того, вы можете использовать select-object с выражениями для возврата «вычисленных» свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...