Short answer: use unary array operator ,
:
,$theArray | foreach{Write-Host $_}
Long answer: there is one thing you should understand about @()
operator: it always interpret its content as statement, even if content is just an expression. Consider this code:
$a="A",'B','C'
$b=@($a;)
$c=@($b;)
I add explicit end of statement mark ;
here, although PowerShell allows to omit it. $a
is array of three elements. What result of $a;
statement? $a
is a collection, so collection should be enumerated and each individual item should be passed by pipeline. So result of $a;
statement is three elements written to pipeline. @($a;)
see that three elements, but not the original array, and create array from them, so $b
is array of three elements. Same way $c
is array of same three elements. So when you write @($collection)
you create array, that copy elements of $collection
, instead of array of single element.