Join-Path
предположительно принимает параметр Path
из конвейера.Протокол пуска Powershell при прохождении по трубопроводу
Это говорит о том, что эти две функции ниже оба должны работать так:
join-path 'c:\temp' 'x' #returns c:\temp\x
'c:\temp' | join-path 'x' #throws an error
Однако второй вызов (т.е. с использованием пропускания параметра Path по значению к трубопроводу) дает ошибку ниже:
join-path : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input. At line:1 char:13 + 'c:\temp' | join-path 'x' + ~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (c:\temp:String) [Join-Path], ParameterBindingException + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.JoinPathCommand
NB: Начиная с path
может быть массив Я также пробовал [array]('c:\temp') | join-path 'x'
; но это не имело значения.
Я что-то не понял или это ошибка в PowerShell?
Ах, конечно; поэтому передача параметра 1 по конвейеру не приводит к тому, что параметр 2 перемещается вверх по цепочке. Немного раздражающий дизайн языка, но, по крайней мере, это имеет смысл; Спасибо. – JohnLBevan
@JohnLBevan, я бы просто сказал, что привязка параметров происходит на этапе синтаксического анализа выражения, перед парсером известно, что вы собираетесь передать что-то из конвейера. – ForNeVeR
Спасибо @ForNeVeR; хорошо знать, что есть основополагающая причина для этого выбора дизайна. – JohnLBevan