我试图找出如何按照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
为空,则它不再生成单独的对象并将它们全部粘在一起,如上例所示。有没有办法强制它成为单独的对象而不是一个连接的对象?
答案 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