599 Stimmen

Wie kann ich in PowerShell überprüfen, ob eine Zeichenfolge null oder leer ist?

Gibt es eine eingebaute IsNullOrEmpty -ähnliche Funktion, um zu prü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 nicht eine Funktion dafür schreiben.

843voto

Keith Hill Punkte 183005

Ihr macht es uns zu schwer. PowerShell behandelt dies recht elegant, z. B.:

> $str1 = $null
> if ($str1) { 'not empty' } else { 'empty' }
empty

> $str2 = ''
> if ($str2) { 'not empty' } else { 'empty' }
empty

> $str3 = ' '
> if ($str3) { 'not empty' } else { 'empty' }
not empty

> $str4 = 'asdf'
> if ($str4) { 'not empty' } else { 'empty' }
not empty

> if ($str1 -and $str2) { 'neither empty' } else { 'one or both empty' }
one or both empty

> if ($str3 -and $str4) { 'neither empty' } else { 'one or both empty' }
neither empty

676voto

Shay Levy Punkte 113401

Sie können die IsNullOrEmpty statische Methode:

[string]::IsNullOrEmpty(...)

60voto

Roman Kuzmin Punkte 38429

Zusätzlich zu [string]::IsNullOrEmpty um auf null oder leer zu prüfen, können Sie eine Zeichenkette explizit oder in booleschen Ausdrücken in einen Booleschen Wert umwandeln:

$string = $null
[bool]$string
if (!$string) { "string is null or empty" }

$string = ''
[bool]$string
if (!$string) { "string is null or empty" }

$string = 'something'
[bool]$string
if ($string) { "string is not null or empty" }

Ausgabe:

False
string is null or empty

False
string is null or empty

True
string is not null or empty

27voto

Rubanov Punkte 3498

Wenn er ein Parameter in einer Funktion ist, können Sie ihn mit ValidateNotNullOrEmpty wie Sie in diesem Beispiel sehen können:

Function Test-Something
{
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$UserName
    )

    #stuff todo
}

26voto

Nico van der Stok Punkte 289

Ich persönlich akzeptiere ein Leerzeichen ($STR3) nicht als "nicht leer".

Wenn eine Variable, die nur Leerzeichen enthält, an einen Parameter übergeben wird, kommt oft die Fehlermeldung, dass der Wert des Parameters nicht "$null" sein darf, anstatt zu sagen, dass es sich nicht um ein Leerzeichen handeln darf. Einige Entfernungsbefehle entfernen möglicherweise einen Stammordner anstelle eines Unterordners, wenn der Name des Unterordners ein "Leerzeichen" ist, ein Grund mehr, in vielen Fällen keine Zeichenkette mit Leerzeichen zu akzeptieren.

Ich finde, das ist der beste Weg, dies zu erreichen:

$STR1 = $null
IF ([string]::IsNullOrWhitespace($STR1)){'empty'} else {'not empty'}

Leere

$STR2 = ""
IF ([string]::IsNullOrWhitespace($STR2)){'empty'} else {'not empty'}

Leere

$STR3 = " "
IF ([string]::IsNullOrWhitespace($STR3)){'empty !! :-)'} else {'not Empty :-('}

Leer!!! :-)

$STR4 = "Nico"
IF ([string]::IsNullOrWhitespace($STR4)){'empty'} else {'not empty'}

Nicht leer

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X