HOWTO · PowerShell

Null-Variablen in PowerShell

Erfahren Sie, was die automatische Variable $null in PowerShell darstellt, wie sie sich in Ausdrücken und Sammlungen verhält und welcher Vergleich oder welche Zeichenfolgenprüfung sich eignet.

Auf dieser Seite

Um zu prüfen, ob ein PowerShell-Wert null ist, stellen Sie $null auf die linke Seite des Vergleichs: $null -eq $value. Mit -ne prüfen Sie auf das Gegenteil. Dieser ausdrückliche Vergleich unterscheidet null von Werten wie $false, 0 und einer leeren Zeichenfolge, die in einer Bedingung ebenfalls als falsch behandelt werden können.

Einführung in Null-Variablen in PowerShell

$null ist die automatische Variable von PowerShell für einen Nullwert. Es ist ein Wert, den Sie zuweisen, vergleichen oder in eine Sammlung aufnehmen können. Er bedeutet weder, dass eine Zeichenfolge leer ist, noch dass jede nicht zugewiesene Variable einen „unbekannten“ Wert hat. Im üblichen Modus ergibt das Lesen einer nicht zugewiesenen Variablen $null; der strikte Modus kann das Verhalten beim Lesen ändern.

Fehler eines Befehls bedeuten im Allgemeinen nicht, dass er $null zurückgegeben hat. Prüfen Sie bei der Fehlersuche die dokumentierten Ergebnisse und das Fehlerverhalten des Befehls und testen Sie anschließend den Wert, den Sie tatsächlich erhalten haben. Eine null-empfindliche Operation kann fehlschlagen, wenn sie ein Objekt, eine Sammlung oder eine Zeichenfolge erwartet. Eine ausdrückliche Prüfung vor der Verwendung des Werts kann helfen, die Ursache leichter einzugrenzen.

Auswirkungen der Null-Variablen in PowerShell

Die Wirkung von $null hängt vom Ausdruck und vom Typ des Werts ab. In einer interpolierten Zeichenfolge trägt $null keine Zeichen bei. Klammern in einer Zeichenfolge wie "Wert: [$value]" machen diese Stelle als [] sichtbar; sie ändern den Nullwert dadurch nicht.

Numerische Ausdrücke können null je nach Operator und Kontext umwandeln oder weitergeben. Gehen Sie nicht davon aus, dass jeder Ausdruck dasselbe numerische Ergebnis liefert: Prüfen Sie die jeweilige Operation und validieren Sie die Eingaben vor Berechnungen.

Bei Sammlungen ist besondere Sorgfalt nötig. Das Indizieren einer Null-Sammlung unterscheidet sich davon, bei einem vorhandenen Array einen Index außerhalb des gültigen Bereichs abzufragen. Ersteres kann einen Fehler verursachen; Letzteres ergibt bei gewöhnlicher Verwendung in PowerShell häufig $null. Wenn dieser Unterschied für ein Skript wichtig ist, prüfen Sie die Sammlung selbst und ihre Grenzen, bevor Sie auf einen Index zugreifen.

Bei Objekten ergibt das Lesen einer nicht vorhandenen Eigenschaft außerhalb des strikten Modus häufig $null. Eine vorhandene Eigenschaft mit dem Wert null liefert bei einem einfachen Nullvergleich denselben Wert. Wenn dieser Unterschied wichtig ist, prüfen Sie zusätzlich die Struktur des Objekts. Ein Methodenaufruf auf $null schlägt fehl, weil kein Objekt den Aufruf entgegennehmen kann. Untersuchen Sie bei der Fehlersuche den Wert unmittelbar vor dem Methodenaufruf; der genaue Fehlertext kann je nach PowerShell-Version und Kontext variieren.

Nullwerte in PowerShell prüfen

Mit den Vergleichsoperatoren -eq und -ne Nullwerte in PowerShell prüfen

Stellen Sie $null beim Prüfen eines einzelnen Werts auf die linke Seite von -eq oder -ne. So vermeiden Sie, dass ein Sammlungsvergleich das Ergebnis verändert: Steht ein Array links, können -eq und -ne passende Array-Elemente statt eines einzelnen booleschen Werts zurückgeben. Ein Array mit Nullwerten kann sich daher in einer if-Bedingung anders verhalten als ein einzelner Wert. Mit $null auf der linken Seite fragt der Vergleich, ob der Wert selbst null ist.

Führen Sie dieses Beispiel aus. Die Beschriftung im unveränderten Beispielblock bleibt Englisch.

$value = 'ready'
if ($null -eq $value) {
    Write-Output 'Value is null.'
} else {
    Write-Output 'Value is present.'
}

Mit dem Operator -not Nullwerte in PowerShell prüfen

-not prüft, ob ein Ausdruck als falsch gilt, und nicht, ob er ausdrücklich $null ist. Der Operator kann auch auf $false, den numerischen Wert null, eine leere Zeichenfolge oder eine leere Sammlung zutreffen. Verwenden Sie ihn, wenn Sie genau diese allgemeinere Bedingung prüfen möchten. Geht es ausdrücklich darum, ob ein Wert null ist, verwenden Sie $null -eq $value.

Mit der Methode IsNullOrEmpty() Nullwerte in PowerShell prüfen

Für eine Zeichenfolge ist [string]::IsNullOrEmpty($text) eine .NET-Zeichenfolgenmethode, die true zurückgibt, wenn das Argument null ist oder die Länge null hat. Eine Zeichenfolge, die Leerzeichen enthält, trifft darauf nicht zu. Verwenden Sie diese Prüfung, wenn sowohl eine fehlende als auch eine leere Zeichenfolge als „kein Text“ gelten soll. Sie ist keine allgemeine Prüfung für beliebige PowerShell-Werte.

Mit der Methode IsNullOrWhiteSpace() Nullwerte in PowerShell prüfen

[string]::IsNullOrWhiteSpace($text) trifft auf null, eine leere Zeichenfolge und eine Zeichenfolge zu, die ausschließlich aus Leerraumzeichen besteht. Wählen Sie diese Methode, wenn auch eine Eingabe aus Leerraumzeichen als leer gelten soll. Mit $text = ' ' vor dem Methodenaufruf prüfen Sie beispielsweise eine Eingabe, die nur aus Leerzeichen besteht; mit $null prüfen Sie stattdessen das Verhalten bei null.

Fazit

Verwenden Sie $null -eq $value für eine direkte Nullprüfung und $null -ne $value, wenn ein Wert vorhanden sein muss. Wählen Sie -not nur, wenn Sie Wahrheitswerte prüfen möchten, und wählen Sie die Zeichenfolgenmethode danach, ob leerer oder ausschließlich aus Leerraum bestehender Text als leer gelten soll. Wenn Sie einen Wert vor dem Indizieren oder einem Methodenaufruf prüfen, können Sie eine Null-Eingabe besser von anderen Fehlerursachen unterscheiden.