Новое прочтение старых сообщений: Get-Process | Dir (о ValueFromPipelineByPropertyName)
Многие MVP по PowerShell и члены группы разработчиков PowerShell помогают мне составлять оглавление нашего блога, фактически это означает, что я возвращаюсь назад и просматриваю все классные штуки[Г1] [a2] , опубликованные в блоге PowerShell за несколько последних лет. Я получаю редкое удовольствие от процесса самообразования и, кстати, когда мы это закончим, в нашем блоге будет гораздо проще что-нибудь найти.
Я стараюсь не отвлекаться и собирать оглавление, вместо того, чтобы комментировать предыдущие сообщения, но некоторые вещи слишком хороши, чтобы устоять.
Например, посмотрите на это сообщение от 17 сентября 2006 г:
В сообщении говорится кое-что о том, как на самом деле можно передать в Get-Item много интересных штук, о которых было неизвестно, как их передать, но ничего не сказано о том, как работает этот кусочек магии PowerShell.
Если это коммандлет или расширенная фунукция, можно указать для параметров атрибут ValueFromPipeline (что приведет к получению из конвейера объекта целиком), можно также получать элемент из конвейера по имени свойства. Поскольку Get-Process имеет свойство Path, и параметр Path у Get-ChildItem помечен как ValueFromPipelineByPropertyName, он использует свойство Path каждого объекта процесса в качестве параметра пути каждого Get-ChildItem.
Зная это вы можете, например, получить все каталоги, в которых находятся запущенные процессы. Вот, посмотрите:
Get-Process |
Get-Item -ErrorAction SilentlyContinue |
Group-Object Directory |
Sort-Object Count -Descending
PowerShell прекрасен.
Надеюсь, это вам поможет,
Джеймс Брандейдж (James Brundage) [MSFT]
Перевод: Виктор Горбунков