有没有什么好方法可以确保管道结果始终是没有数组文字@()
的数组?
目前,我总是发现自己编写管道并假设结果是一个数组,例如
$Results = $ResultFiles | Where Name -like $Pattern | Sort -Unique Name
# Processing that assume $Results is array, e.g.
Out-Host -InputObject "found $($Results.Length) matching files..."
# Further processing that assume $Results is array
然后,我意识到我需要确保$Results
始终是一个数组。所以,我回过头来添加前面的魔术@()
,@(
和后面的)
:
$Results = @( <pipeline_statement> )
通过添加到空数组,甚至更神奇
$Results = @() + <pipeline_statement>
我的问题:有没有办法确保管道总是产生一个数组?这不需要“魔术”@()
?我想创建一个收集管道结果的函数,例如ConvertTo-Array
,如:
$Results = <pipeline_statement> | ConvertTo-Array
但我宁愿使用默认的Cmdlet或惯用语。
注意:
我也试图创建ConvertTo-CustomObject
,因为我经常发现自己从哈希表创建PSCustomObject
。
答案 0 :(得分:3)
是的,有。能够直接将单个值强制转换为数组。如果该值已经是[Object[]]
,则无法有效更改。
[Array]$result=<pipeline_statement>
如@wannabeprogrammer的评论中所述,这不会将null值转换为数组。如果某些东西可以返回null,则以下添加将解决这种情况:
if ($result -eq $null) { $result = @() }