Blogbeitrag

07 | 12 | 2016

PowerShell Quirks: String-Array als verbindliches Argument

Geschrieben von um 18:04 Uhr

Nicht wirklich schwierig, aber gut zu wissen: Nehmen wir mal eine Funktion, die irgendwas mit einem Array aus Strings machen soll. Und weil wir sie nicht umsonst aufrufen wollen, deklarieren wir diesen Parameter als verbindlich:

function Do-Something {
    [CmdletBinding()]
    Param(
        [Parameter (Mandatory=$true)][string[]]$in_content
    )
    foreach ($x in $in_content) {
        $col = Get-Random @('Red','Yellow','Green')
        Write-Host $x -ForegroundColor $col
    }
}

Wenn wir also Do-Something ‚blahblahblah‘ oder Do-Something @(‚blah‘,’suelz‘,’foo‘,’bar‘) aufrufen, bekommen wir das erwartete Ergebnis. Die Funktion sollte aber in meinem Fall Inhalte von Textdateien verarbeiten:

Do-Something (Get-Content 'c:\temp\textfile01.txt')

Und siehe da, prompt bekam man den Fehler „Do-Something : Cannot bind argument to parameter ‚in_content‘ because it is an empty string.„. Offensichtlich enthält die Textdatei eine leere Zeile, und diese wird durch den Mandatory-Dekorator geblockt.

Um dies zu umgehen, kann man den Parameter wie folgt definieren:

[Parameter (Mandatory=$true)][AllowEmptyString()][string[]]$in_content

Ganz ohne Argument kann man die Funktion danach immer noch nicht aufrufen. Happy scripting!

Beitragsdetails

Tags » , , , , «

gravatar

Kategorie » PowerShell «

Trackback: Trackback-URL |  Kommentar-Feed: RSS 2.0 | 185 Worte

Beitrag kommentieren

Kommentar schreiben ...

Deine E-Mail-Adresse wird nicht veröffentlicht.

(X)HTML Tags zur Formatierung der Kommentare

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>