Im SharePoint-Kontext benötigt man immer mal wieder eine StringCollection (System.Collections.Specialized.StringCollection). Um diese zu erstellen wollte ich "kurz" eine PowerShell-Funktion dazu erstellen. Drei Punkte habe ich dabei gelernt:
- Der OutputType einer Funktion wird nur für Autovervollständigung z.B. in der ISE benutzt. Der "wirkliche" Rückgabe-Typ entspricht immer der eigentlichen Rückgabe zur Laufzeit.
- Rückgaben, die eine Auflistung sind werden "unrolled". D.h. diese erscheinen in der Rückgabe dann als normales Array.
- "unrolling" kann in der Rückgabe verhindert werden wenn dieser ein Komma vorgestellt wird. (Also "return ,$foo;" - reichlich komisch...)
Der Code im Ergebnis sieht dann so aus:
function Create-StringCollection {
<#
.SYNOPSIS
Creates a StringCollection from a array of strings
.PARAMETER txt
strings to convert
.EXAMPLE
@("foo", "bar") | Create-StringCollection
#>
[CmdletBinding()]
[OutputType([System.Collections.Specialized.StringCollection])]
param (
[Parameter(Mandatory=$true, ValueFromPipeline=$True)]
[string[]]$txt
)
Begin {
$coll = New-Object System.Collections.Specialized.StringCollection;
}
Process {
$coll.Add($txt) | Out-Null;
}
End {
,$coll; # hack to prevent powershell from "unrolling" the enumerable
}
}