System.IO.FileInfo
/ System.IO.DirectoryInfo
экземпляры, выводимые командлетами PowerShell, имеют свойство .PSPath
[*] , которое содержит полный путь к экземплярам, то есть полный файл -системный путь с префиксом имени поставщика PS (например, Microsoft.PowerShell.Core\FileSystem::C:\windows
).
Командлеты обработки файлов, такие как Get-FileHash
, имеют параметр -LiteralPath
с псевдонимом -PSPath
.
Поскольку параметр -LiteralPath
(обычно) принимает входные данные из конвейера по имени свойства , input объекты, имеющие свойство .PSPath
, автоматически связываются с ним , благодаря псевдониму параметра PSPath
.
Как обнаружить это поведение:
Программно:
- Примечание:
Get-Help Get-FileHash -Parameter LiteralPath | Select-Object name, aliases, pipelineinput
также работает в в этом случае, но этот подход обычно ограничен целевыми командами, которые поставляются с MAML - база d Файлы справки, и даже те, которые имеют, могут иметь файлы справки, которые не синхронизированы c с фактическим определением команды.
PS> & {
Get-Command $args[0] | % Parameters | % $args[1] |
Select-Object Name, Aliases, @{
n = 'Accepts pipeline input';
e = { $(if ($_.Attributes.ValueFromPipeline) { 'by value' }), $(if ($_.Attributes.ValueFromPipelineByPropertyName) { 'by property name' }) -join ', ' -replace '^, ' }
}
} Get-FileHash LiteralPath
Name Aliases Accepts pipeline input
---- ------- ----------------------
LiteralPath {PSPath, LP} by property name
[*] Это поставщик файловой системы PowerShell, который, помимо прочего, добавляет это свойство. Базовые типы. NET имеют , а не . См. этот ответ для получения дополнительной информации.