Почему `help format-list` не совпадает с`format-list | help`?
help format-list
выводит справку для format-list.
format-list | help
выводит справку для справки (get-help).
2 ответа
Помощь - это функция, которая по существу перенаправляет на:
Get-Help command | more
Если вы посмотрите на определение этой функции, вы увидите, что она принимает позиционный аргумент с тегом ValueFromPipelineByPropertyName
с аргументом Name
,
PS ~\> Get-Content function:help
<#
.FORWARDHELPTARGETNAME Get-Help
.FORWARDHELPCATEGORY Cmdlet
#>
[CmdletBinding(DefaultParameterSetName='AllUsersView')]
param(
[Parameter(Position=0, ValueFromPipelineByPropertyName=$true)]
[System.String]
${Name},
# Other arguments deleted for brevity
[Switch]
${Online})
$outputEncoding=[System.Console]::OutputEncoding
Get-Help @PSBoundParameters | more
Это в основном означает, что если он видит аргумент со свойством Name
, это связывает это как входной параметр. Итак, когда вы делаете:
format-list | help
команда format-list выполняется (и ничего не возвращается), поэтому функция справки считает, что она не получила аргументов.
Когда вы делаете:
"format-list" | help
Вы передаете строковый аргумент. Тип строки не имеет Name
prooperty, так что вы получите сообщение об ошибке, в котором говорится, что он не может связать аргументы. Однако, если вы попробовали:
PS ~\> get-command format-list
CommandType Name Definition
----------- ---- ----------
Cmdlet Format-List Format-List [[-Property] <Object[]>] [-GroupBy <...
вы можете видеть, что команда format-list имеет свойство Name, так что если вы попытались
get-command format-list | help
Вы получаете помощь для format-list
,
| или оператор "pipe" перенаправляет вывод одной операции в другую. Так что в этом случае вы вызываете format-list, а затем перенаправляете вывод этого в качестве параметра, чтобы помочь. справка не знает, что делать с этим параметром, поэтому она входит в заданный по умолчанию behvaior (справка для справки).