通过管道传递路径时的Powershell连接路径错误

时间:2015-04-07 13:07:21

标签: powershell filepath powershell-v4.0

据称{p> 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中的错误?

1 个答案:

答案 0 :(得分:3)

在第一个示例中,PowerShell将表达式join-path 'c:\temp' 'x'解释为Join-Path -Path 'c:\temp' -ChildPath 'x'(因为位置参数PathChildPath的名称是可选的。)

在第二个示例中,您将管道参数'c:\temp'传递给命令Join-Path -Path 'x'(不是缺少ChildPath参数)。它不起作用,因为Join-Path只接受来自管道的Path参数,但您已经定义了它。

如果要绑定另一个而不是第一个参数,则应明确地将其命名为

'c:\temp' | Join-Path -ChildPath 'x'
# => 'c:\temp\x'