PowerShell中if语句判断TcpTestSucceeded值时逻辑错误问题咨询
问题原因
Test-NetConnection返回的TcpTestSucceeded属性是布尔类型,而非字符串类型。你在判断时用-eq 'False'将布尔值与字符串做比较,PowerShell执行比较运算时会自动将右侧的操作数转换为和左侧一致的类型:非空字符串转换为布尔值时统一返回$true,因此你的判断条件实际等价于if($test_result.TcpTestSucceeded -eq $true),刚好和你预期的判断逻辑完全相反,所以才会出现返回$true时命中if分支输出a的问题。
修复方案
- 方案1:直接和布尔常量
$false做比较,不要加引号
if($test_result.TcpTestSucceeded -eq $false ) { Write-Output 'a' } else { Write-Output 'b' }
- 方案2:使用PowerShell原生的取反语法,写法更简洁
if(-not $test_result.TcpTestSucceeded) { Write-Output 'a' } else { Write-Output 'b' }
内容的提问来源于stack exchange,提问作者Radek Gąska
相关产品推荐
相关产品推荐

