Arrays 组合2个PowerShell阵列
我正试图找出如何结合微软解释的2个阵列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项需要迭代:
$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无论什么能让你的船漂浮,很高兴我能教你一些新东西:)