2017-02-24 59 views
1

我想要做的东西沿着这些路线胁迫数组字符串:PowerShell的当试图调用C#可变参数的函数

$prefix = "C:\Users" 

function prefix-path([string[]] $paths) { 
    Write-Output ([System.IO.Path]::Combine(@($prefix) + $paths)) 
} 

prefix-path(1, 2, 3, 4) 

我想收到C:\Users\1\2\3\4但我得到的是这样的:C:\Users 1 2 3 4。引用1,2等没有帮助。

我假设PowerShell出于某种原因假设我想将数组转换为字符串,然后继续调用Combine(String)版本,但我希望它显然调用Combine(params String[])

当我包装Combine它的作品。

function wrapped-combine([string[]] $path) { 
    Write-Output ([System.IO.Path]::Combine($path)) 
} 

为什么会发生这种情况,我该如何正确编写prefix-path

回答

2

发生这种情况的原因是该方法预计为[string[]],但在PowerShell中,字符串(或任何类型的字符串)的数组缺省趋向于[Object[]]

如果你将它转换为[string[]]它会工作,这是你的“包装”功能发生了什么:

[string[]]$components = @($prefix) + $paths 
[System.IO.Path]::Combine($components) 
相关问题