Arrays 组合2个PowerShell阵列

Arrays 组合2个PowerShell阵列,arrays,powershell,Arrays,Powershell,我正试图找出如何结合微软解释的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项需要迭代:

我正试图找出如何结合微软解释的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
为空,它将不再生成单独的对象,并将它们粘在一起,如前一个示例所示。有没有一种方法可以将其强制为单独的对象而不是连接的对象?

这是因为$Source是一个
系统。字符串和
+
可能是
Concat的重载。如果将
$Source
强制转换为数组,将获得所需的输出:

[array]$Source + $Array.FullName | Measure-Object # 86
在PowerShell中,左侧操作数确定使用的运算符重载,右侧操作数转换为满足该操作的类型

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

[string]+[strings数组]
生成一个
[string]
(Count=1)
[字符串数组]+[string]
生成一个
[字符串数组]
(计数=数组大小+1)

通过在左侧参数上使用数组子表达式运算符(
@()
),可以强制
+
运算符执行数组连接:

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

@($Source;$Array.FullName)
是!!就这样!非常感谢你,佩瑟拉尔,你在这里帮了我很多<代码>+
不是别名,它只是重载(就像方法一样)。多亏了Mathias,现在我终于明白了为什么会发生这种不同的行为。为了便于阅读,我将使用以下
@($Source;$Array.FullName)
,正如PetSerAl在评论中所建议的那样。@DarkLite1无论什么能让你的船漂浮,很高兴我能教你一些新东西:)