Скорее всего, в PowerShell есть что-то фундаментальное, чего я не понимаю.Мне действительно не нравится, когда пишут даже трубы среднего размера, когда захват свойства нарушает рабочий процесс из-за необходимости ставить скобки вокруг оператора до этой точки, например.
(Get-ChildItem ~\.gitconfig).Length
Это утомительно.Поскольку Length
очень похоже на свойство, можно подумать, что
Get-ChildItem ~\.gitconfig | Get-ItemPropertyValue -Name Length
будет работать.Однако это не так.Взглянув на интерфейс объекта System.IO.FileSystemInfo
, возвращаемого провайдером файловой системы PSDrive, мы видим, что у него нет свойства Length.У него есть свойство FullName, поэтому
Get-ChildItem ~\.gitconfig | Get-ItemPropertyValue -Name FullName
работает, как и ожидалось.Чтобы получить размер (Length
) файла с использованием канала, необходимо использовать Select-Object
с -ExpandProperty
, как
Get-ChildItem ~\.gitconfig | Select-Object -ExpandProperty Length
Как узнать заранее, помещает ли.
после объекта и итерации по результатам завершения табуляции, если запись является объектом или свойством? Очень неприятно, что даже обычные операции путают, как ад, учитывая, например, что чтение переменных среды идет
Get-Item -Path Env:\USERNAME
возвращает
Name Value
---- -----
USERNAME mnagy
Если это элемент, Get-ItemProperty
и Get-ItemPropertyValue
должны сыграть здесь роль.Из-за структуры Name: Value результата, новички могут быть заинтригованы, чтобы получить действительное значение, говоря
Get-Item -Path Env:\USERNAME | Get-ItemPropertyValue
или читая, как следует использовать Get-ItemPropertyValue
, измените запрос на
Get-ItemPropertyValue -Path Env:\ -Name USERNAME
, что на самом деле приводит к
Get-ItemPropertyValue : Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.
At line:1 char:1
+ Get-ItemPropertyValue -Path Env:\ -Name USERNAME
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotImplemented: (:) [Get-ItemPropertyValue], PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported,Microsoft.PowerShell.Commands.GetItemPropertyValueCommand
Вся эта конструкция кажется мне совершенно несовместимой и весьма обидной, но, надеюсь, не по замыслу, а потому, что я смотрю на нее не с того угла.