PowerShell中判断变量空值需区分未定义、$null、空字符串及空白字符:用[string]::IsNullOrEmpty()判字符串是否为$null或"";用[string]::IsNullOrWhiteSpace()进一步包含空白符;用Test-Path variable:\Name检测变量是否存在;避免直接用if($str)因空格字符串会返回True。
在 powershell 中,检查变量是否为空或未初始化,关键在于区分三种常见状态:变量未定义(不存在)、值为 $null、值为空字符串 "" 或仅含空白字符。powershell 对空值的判断比多数语言更细致,不能只靠简单条件语句一概而论。
用 [string]::IsNullOrEmpty() 判断字符串型空值
这是最常用、最安全的方式,专门用于字符串变量——它能同时捕获 $null 和空字符串 "":
-
[string]::IsNullOrEmpty($str)返回 True 表示变量是$null或"" - 返回 False 表示变量有非空字符串内容(哪怕只有空格)
- 注意:它对非字符串类型(如数组、哈希表)会报错,使用前建议先确认类型或用
-is [string]过滤
用 [string]::IsNullOrWhiteSpace() 处理“看似有内容实则无效”的情况
当需要把纯空格、制表符、换行符也视为空时,这个方法更严格(PowerShell 3.0+ 支持):
-
[string]::IsNullOrWhiteSpace($str)对$null、""、" "、"`t`n"都返回 True - 适合用户输入、配置读取等场景,避免因无意空格导致逻辑误判
- 同样仅适用于字符串;若变量可能是其他类型,先做类型判断再调用
检查变量是否存在(即是否已声明)
未定义的变量不是 $null,而是根本“找不到”,直接引用会报错。要安全检测存在性:
- 用
Test-Path variable:\Name—— 例如Test-Path variable:\myVar返回 True 表示变量已声明(无论值是什么) - 用
Get-Variable -Name Name -ErrorAction SilentlyContinue,配合$?判断是否成功获取 - 不推荐用
$myVar -eq $null来判断“未定义”,因为未定义变量会触发错误,而非返回False
简洁写法:在 if 语句中直接判断(适用于多数字符串场景)
PowerShell 的隐式布尔转换对字符串很友好,但要注意边界:
-
if ($str) { ... }—— 当$str是$null、""或@()(空数组)时,整体为 False - 但
" "(空格字符串)会被转为 True,这常被忽略 - 所以日常脚本中,建议优先用
[string]::IsNullOrWhiteSpace($str)替代裸 if,更明确、更少陷阱


















