如何从powershell管道获取字符串数组?

时间:2014-03-20 21:16:00

标签: arrays powershell

我有一个目录名列表,我希望将其转换为绝对路径,并删除任何无效路径名。我最初尝试这样做的是管道

$dirs = 'dir1', 'dir2', 'dir3'
$paths = $dirs | % { Resolve-Path -ea 0 $_ } | Select -ExpandProperty Path

但是,我得到的内容是[Object[]]而不是[String[]]。我尝试确保路径存在(通过向管道添加? { Test-Path $_ }步骤,但这没有帮助。

我做错了什么?如何将目录作为字符串列表获取?我需要这个,以便我可以将数组连接到另一个字符串数组,特别是

$newpath = (($env:PATH -split ';'), $paths) -join ';'

2 个答案:

答案 0 :(得分:0)

这似乎有效:

 $newpath = (@($env:PATH) + $paths) -join ';'

你真的不需要将它显式地转换为[string []]。 Powershell将从命令上下文中找出并将数据强制转换为正确的类型。

答案 1 :(得分:0)

object[]只是PowerShell中的默认数组,在这种(大多数)情况下并不重要。您的问题是您尝试使用(arr1, arr2)加入阵列。这实际上是创建一个包含两个数组对象的数组,因为,是一个数组构造运算符。尝试使用+加入数组,如下所示:

$dirs = 'dir1', 'dir2', 'dir3'
$paths = $dirs | % { Resolve-Path -ea 0 $_ } | Select -ExpandProperty Path    

$newpath = (($env:PATH -split ';') + $paths) -join ';'

你甚至可以跳过分裂,只需做

$dirs = 'dir1', 'dir2', 'dir3'
$paths = $dirs | % { Resolve-Path -ea 0 $_ } | Select -ExpandProperty Path
$newpath = "$env:PATH;$($paths -join ';')"