Join-Path
接受了管道中的Path
参数。
这表明下面的两个函数都应该都是一样的:
join-path 'c:\temp' 'x' #returns c:\temp\x
'c:\temp' | join-path 'x' #throws an error
但是第二次调用(即使用Path参数按值传递给管道)会产生以下错误:
join-path:输入对象不能绑定到命令的任何参数,因为该命令不接受管道输入或 输入及其属性与管道输入的任何参数都不匹配。 在行:1 char:13 +'c:\ temp'| join-path'x' + ~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:(c:\ temp:String)[Join-Path],ParameterBindingException + FullyQualifiedErrorId:InputObjectNotBound,Microsoft.PowerShell.Commands.JoinPathCommand
注意:由于path
可能是一个数组,我也尝试[array]('c:\temp') | join-path 'x'
;但这并没有什么区别。
我是否误解了某些内容,或者这是PowerShell中的错误?
答案 0 :(得分:3)
在第一个示例中,PowerShell将表达式join-path 'c:\temp' 'x'
解释为Join-Path -Path 'c:\temp' -ChildPath 'x'
(因为位置参数Path
和ChildPath
的名称是可选的。)
在第二个示例中,您将管道参数'c:\temp'
传递给命令Join-Path -Path 'x'
(不是缺少ChildPath
参数)。它不起作用,因为Join-Path
只接受来自管道的Path
参数,但您已经定义了它。
如果要绑定另一个而不是第一个参数,则应明确地将其命名为
'c:\temp' | Join-Path -ChildPath 'x'
# => 'c:\temp\x'