Blog

PowerShell - Nullvergleich entmystifiziert

3 min read
3 min read

Wir arbeiten regelmäßig an der Anleitung für PowerShell-Regeln. Die Erforschung von Regeln erfordert eine Menge Recherche und ein Verständnis für die interne Funktionsweise einer Programmiersprache, um die besten Praktiken der Gemeinschaft zu ermitteln .

Eine dieser bewährten Praktiken besteht darin, mit Powershell $null auf der linken statt auf der rechten Seite eines Vergleichs zu vergleichen. Der zweite Teil besteht darin, nicht die Short Hand zu benutzen, indem man den Nullwert negiert, da dies die Absicht des Skripts verwirren könnte.

Das ist großartig, es macht Sinn! Wir wollen die Intention des Codes klar darstellen. Daher ist es wichtig, möglichst unmissverständlich und für andere nachvollziehbar zu agieren. Aber warum macht es trotzdem Sinn, bei einem Vergleich den Nullwert auf die linke Seite zu setzen?

Zeit zu spielen


Mit dem obigen Code haben wir festgestellt, dass PowerShell eine ziemlich flexible Sprache ist, wenn es um Vergleiche geht. Leider kann dies die Absicht des Codes ernsthaft verwirren und in der Zukunft zu Problemen bei der Unterstützung führen. Was wir noch nicht ganz geklärt haben, ist, warum wir die Null auf der linken Seite des Vergleichs setzen sollten.

Auf den Punkt gebracht

Mit Hilfe des Community-Analyzers PSScriptAnalyzer weiß ich, dass die Übeltäter Arrays sind. Aber wir müssen das reproduzieren und herausfinden, warum. Also mehr Zeit zum Spielen!

Im obigen Code sehen wir ein seltsames Verhalten. Was ist hier los?

Es ist nicht das, was Sie erwarten. Aufgrund der in der PowerShell verwendeten Methoden zur Typinferenz wird das Array mit einem einzelnen $null- oder leeren Feld in false umgewandelt, wenn der Vergleich auf der linken Seite stattfindet, und in true, wenn zwei $nulls im Array vorhanden sind. Das funktioniert immer. Als ich den Test fortsetzte und drei $null-Objekte im Array hatte, war das Array wieder nicht gleich null. (also das ganze - das eigentliche - Problem noch einmal)

Dies kann, wie Sie sicher wissen, zu Verwirrung im Code führen und einige sehr unerwünschte Umstände hervorrufen.

tl;dr

Verwenden Sie $null im Vergleich auf der linken Seite. Aufgrund der Typinferenz werden Arrays auf $null geprüft, wobei die Gesamtzahl der Nullen jedes Elements gleich ist.

Sie sind dran

Um die Kontrolle über die Qualität Ihres Codes zu behalten, sei es aus PowerShell, C#, JavaScript oder einer anderen Sprache, gibt es einige großartige Tools auf dem Markt. SPCAF ist das einzige Tool, das sich an SharePoint richtet. Klicken Sie auf die Schaltfläche unten, um mehr zu erfahren und eine kostenlose Testversion anzufordern.