组合2个PowerShell阵列

时间:2016-02-15 09:10:05

标签: arrays powershell

我试图找出如何按照Microsoft here解释的方式组合2个数组。

$Source = 'S:\Test\Out_Test\Departments'
$Array = Get-ChildItem $Source -Recurse

$Array.FullName | Measure-Object # 85
$Array.FullName + $Source | Measure-Object # 86
$Source + $Array.FullName | Measure-Object # 1

以下只有1项要迭代:

$i = 0
foreach ($t in ($Source + $Array.FullName)) {
    $i++
    "Count is $i"
    $t
}

我的问题是,如果$Source$Array为空,则它不再生成单独的对象并将它们全部粘在一起,如上例所示。有没有办法强制它成为单独的对象而不是一个连接的对象?

2 个答案:

答案 0 :(得分:7)

在PowerShell中,左侧操作数确定使用的操作符过载,右侧转换为满足操作的类型。

这就是为什么你可以观察到

[string] + [array of strings]会产生[string](计数= 1) [array of strings] + [string]会产生[array of strings](Count =数组大小+ 1)

您可以使用左侧参数中的数组子表达式运算符+)强制@()运算符执行数组连接:

$NewArray = @($Source) + $Array.FullName

答案 1 :(得分:2)

这是因为$ Source是System.String+可能是Concat的重载。如果将$Source转换为数组,您将获得所需的输出:

[array]$Source + $Array.FullName | Measure-Object # 86