如何检查一个string是否为空或在PowerShell中为空?

有没有一个内置的IsNullOrEmpty类似的函数来检查一个string是否为空或在PowerShell中?

到目前为止我找不到它,如果有内置的方法,我不想为此写一个函数。

您可以使用IsNullOrEmpty静态方法:

 [string]::IsNullOrEmpty(...) 

你们这样做太难了 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 

除了[string]::IsNullOrEmpty ,为了检查null或者空,你可以显式地或者在布尔expression式中将一个string转换为布尔值:

 $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 

如果它是一个函数中的参数,您可以使用ValidateNotNullOrEmpty对其进行ValidateNotNullOrEmpty ,如下例所示:

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

就个人而言,我不接受空格($ STR3)为“不空”。

当一个只包含空格的variables被传递给一个参数时,参数值可能不是'$ null',而不是说它可能不是空格,子文件夹,如果子文件夹名称是一个“空白”,所有理由不接受包含空格的string在很多情况下。

我觉得这是实现它的最好方法:

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

不是空的

我有一个PowerShell脚本,我必须在计算机上运行,​​以至于它没有[String] :: IsNullOrWhiteSpace(),所以我写了自己的。

 function IsNullOrWhitespace($str) { if ($str) { return ($str -replace " ","" -replace "`t","").Length -eq 0 } else { return $TRUE } } 

检查长度。 如果对象存在,它将有一个长度。

空对象没有长度,不存在,不能被检查。

string对象有一个长度。

问题是:IsNull或IsEmpty,不是IsNull或IsEmpty或IsWhiteSpace

 #Null $str1 = $null $str1.length ($str1 | get-member).TypeName[0] # Returns big red error #Empty $str2 = "" $str2.length ($str2 | get-member).TypeName[0] # Returns 0 ## Whitespace $str3 = " " $str3.length ($str3 | get-member).TypeName[0] ## Returns 1 

请注意,“if($ str)”和“IsNullOrEmpty”testing在所有情况下都不起作用:$ str = 0的赋值会对两者产生false,并且根据预期的程序语义,这可能会产生一个惊喜。