Gibt es eine integrierte IsNullOrEmpty
ähnliche Funktion, um zu überprüfen, ob eine Zeichenfolge in PowerShell null oder leer ist?
Ich konnte es bisher nicht finden und wenn es einen eingebauten Weg gibt, möchte ich keine Funktion dafür schreiben.
.net
string
powershell
null
Bleistiftkuchen
quelle
quelle
String.IsNullOrEmpty
?Antworten:
Sie können die
IsNullOrEmpty
statische Methode verwenden:quelle
!
. Dies funktioniert nur in neueren Versionen von PowerShell.!
ist ein Alias für-not
Ihr macht das zu schwer. PowerShell handhabt dies ziemlich elegant, z.
quelle
IsNullOrWhitespace()
für dieses Szenario empfehle . Aber nach 11 Jahren Scripting mit PowerShell brauche ich diesen Stringtest sehr selten . :-)Zusätzlich
[string]::IsNullOrEmpty
können Sie zur Überprüfung auf Null oder Leer eine Zeichenfolge explizit oder in Booleschen Ausdrücken in einen Booleschen Wert umwandeln:Ausgabe:
quelle
If
Klausel konvertiert intern alles in der Klammer in einen einzigen Booleschen Wert, was bedeutet, dassif($string){Things to do for non-empty-nor-null}
oderif(!$string){Things to do for empty-or-null}
ohne explizite Konvertierung[bool]
ausreichen würde.Wenn es sich um einen Parameter in einer Funktion handelt, können Sie ihn
ValidateNotNullOrEmpty
wie in diesem Beispiel sehen überprüfen:quelle
Persönlich akzeptiere ich ein Leerzeichen ($ STR3) nicht als "nicht leer".
Wenn eine Variable, die nur Leerzeichen enthält, an einen Parameter übergeben wird, tritt häufig der Fehler auf, dass der Parameterwert möglicherweise nicht '$ null' ist. Anstatt zu sagen, dass es sich nicht um ein Leerzeichen handelt, entfernen einige Entfernungsbefehle möglicherweise einen Stammordner anstelle von a Unterordner Wenn der Name des Unterordners ein "Leerzeichen" ist, ist dies in vielen Fällen der Grund, eine Zeichenfolge mit Leerzeichen nicht zu akzeptieren.
Ich finde, dies ist der beste Weg, um dies zu erreichen:
Leeren
Leeren
Leeren!! :-)
Nicht leer
quelle
Ich habe ein PowerShell-Skript, das ich auf einem Computer ausführen muss, der so veraltet ist, dass er nicht über [String] :: IsNullOrWhiteSpace () verfügt, also habe ich mein eigenes geschrieben.
quelle
quelle
PowerShell 2.0 Ersatz für
[string]::IsNullOrWhiteSpace()
iststring -notmatch "\S"
(" \ S " = ein beliebiges Nicht-Leerzeichen)
Leistung ist sehr nah:
quelle
Eine andere Möglichkeit, dies auf reine PowerShell-Weise zu erreichen, besteht darin, Folgendes zu tun:
Dies wird erfolgreich für Null, leere Zeichenfolge und Leerzeichen ausgewertet. Ich formatiere den übergebenen Wert in eine leere Zeichenfolge, um null zu behandeln (andernfalls verursacht eine Null einen Fehler, wenn Trim aufgerufen wird). Bewerten Sie dann einfach die Gleichheit mit einer leeren Zeichenfolge. Ich glaube, ich bevorzuge immer noch den IsNullOrWhiteSpace, aber wenn Sie nach einem anderen Weg suchen, wird dies funktionieren.
In einem Anfall von Langeweile spielte ich damit und machte es kürzer (wenn auch kryptischer):
oder
je nachdem, was Sie versuchen zu tun.
quelle
Beachten Sie, dass die Tests
"if ($str)"
und"IsNullOrEmpty"
nicht in allen Fällen vergleichbar funktionieren: Eine Zuweisung von$str=0
erzeugt für beide Werte false. Abhängig von der beabsichtigten Programmsemantik kann dies zu einer Überraschung führen.quelle
Überprüfen Sie die Länge. Wenn das Objekt vorhanden ist, hat es eine Länge.
Nullobjekte haben keine Länge, existieren nicht und können nicht überprüft werden.
String-Objekte haben eine Länge.
Die Frage war: IsNull oder IsEmpty, NICHT IsNull oder IsEmpty oder IsWhiteSpace
quelle
Null objects have no length
- haben Sie versucht, auszuführen$null.length
? :-) Für einen schnellen Bool-Test scheint es mir ein bisschen schwer zu sein, in Get-Member zu pipen und dann den resultierenden Fehler für den Fall $ null zu behandeln.