PowerShell中get-alias重定向输出为何影响别名存在判断?
PowerShell重定向干扰别名存在判断的原因及解决办法
问题根源
在PowerShell里,Get-Alias找到目标别名时,会返回一个别名对象,这个对象同时会输出到成功输出流(流1)。当你用> $null重定向流1时,等于把这个返回的对象直接丢弃了,此时(get-alias ls >$null)的结果就是$null。而PowerShell的if判断中,$null会被判定为$false,所以会错误进入else分支,提示别名不存在。
没加重定向的原始代码中,Get-Alias ls返回的别名对象会被保留,非空对象在if判断里会被解析为$true,因此能正确判断别名存在。
正确解决方案
方案1:用Test-Path直接检测(最简洁高效)
PowerShell内置了Alias:驱动器,直接通过Test-Path检测该路径下的别名是否存在,返回值本身就是布尔值,无需额外处理输出:
if (Test-Path Alias:ls) { Write-Host "=> Alias ls already exists." } else { Write-Host "=> Alias ls does not exist." }
方案2:给Get-Alias加错误抑制参数
给Get-Alias添加-ErrorAction SilentlyContinue参数,这样找不到别名时不会抛出错误,找到时返回对象,判断逻辑正常,同时不会输出别名的详细信息:
if (Get-Alias ls -ErrorAction SilentlyContinue) { Write-Host "=> Alias ls already exists." } else { Write-Host "=> Alias ls does not exist." }
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

