514

PowerShell で、文字列が null または空であるかどうかを確認するための組み込みのIsNullOrEmptyような関数はありますか?

これまでのところ見つけられませんでした。組み込みの方法があれば、そのための関数を書きたくありません。

4

13 に答える 13

715

あなたたちはこれを難しくしすぎています。PowerShell はこれを非常にエレガントに処理します。

> $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
于 2012-12-06T16:21:37.947 に答える
589

IsNullOrEmpty静的メソッドを使用できます。

[string]::IsNullOrEmpty(...)
于 2012-12-06T07:48:30.367 に答える
52

nullまたは空をチェックするために加えて[string]::IsNullOrEmpty、明示的にまたはブール式で文字列をブール式にキャストできます。

$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" }

出力:

False
string is null or empty

False
string is null or empty

True
string is not null or empty
于 2012-12-06T08:30:54.067 に答える
24

関数内のパラメーターである場合は、次のValidateNotNullOrEmpty例でわかるように検証できます。

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

    #stuff todo
}
于 2015-03-30T12:50:43.193 に答える
17

個人的には、空白 ($STR3) を「空ではない」として受け入れません。

空白のみを含む変数がパラメータに渡されると、空白ではない可能性があると言う代わりに、パラメータ値が「$null」ではない可能性があるというエラーがよく発生します。一部の削除コマンドは、サブフォルダー名が「空白」の場合、多くの場合、空白を含む文字列を受け入れないすべての理由があります。

これがそれを達成するための最良の方法だと思います:

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

空の

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

空の

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

空の!!:-)

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

空ではない

于 2016-02-10T14:04:08.083 に答える
2

純粋な PowerShell の方法でこれを達成する別の方法は、次のようにすることです。

("" -eq ("{0}" -f $val).Trim())

これは、null、空の文字列、および空白について正常に評価されます。null を処理するために、渡された値を空の文字列にフォーマットしています (そうしないと、Trim が呼び出されたときに null によってエラーが発生します)。次に、空の文字列で等価性を評価します。私はまだ IsNullOrWhiteSpace を好むと思いますが、それを行う別の方法を探している場合は、これが機能します。

$val = null    
("" -eq ("{0}" -f $val).Trim())
>True
$val = "      "
("" -eq ("{0}" -f $val).Trim())
>True
$val = ""
("" -eq ("{0}" -f $val).Trim())
>True
$val = "not null or empty or whitespace"
("" -eq ("{0}" -f $val).Trim())
>False

退屈のあまり、私はこれをいじって短くしました(より不可解ではありますが):

!!(("$val").Trim())

また

!(("$val").Trim())

あなたがしようとしていることに応じて。

于 2018-02-06T21:37:25.647 に答える
1

"if ($str)"および"IsNullOrEmpty"テストは、すべてのインスタンスで同じように機能するわけではないことに注意してください$str=0

于 2016-11-27T19:37:49.287 に答える