Проверьте замену Write-Output http://poshcode.org/2300, которая имеет параметр -AsCollection, позволяющий избежать развертывания.Но в основном, если вы пишете функцию, которая выводит коллекцию, и вы не хотите, чтобы эта коллекция развернулась, вам нужно использовать CmdletBinding и PSCmdlet:
function Get-Array {
[CmdletBinding()]
Param([Switch]$AsCollection)
[String[]]$data = "one","two","three","four"
if($AsCollection) {
$PSCmdlet.WriteObject($data,$false)
} else {
Write-Output $data
}
}
Если вы вызываете это с -AsCollection,Результаты получатся совсем другие, хотя они будут СМОТРЕТЬ ЖЕ в консоли.
C:\PS> Get-Array
one
two
three
four
C:\PS> Get-Array -AsCollection
one
two
three
four
C:\PS> Get-Array -AsCollection| % { $_.GetType() }
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String[] System.Array
C:\PS> Get-Array | % { $_.GetType() }
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
True True String System.Object
True True String System.Object
True True String System.Object