PowerShell If语句比较失效:为何两变量看似相等却不匹配
问题原因与解决方法
问题根源
$temp1是字符串类型,值为"@{Dhcp=Disabled}"$temp2是Select-Object返回的PSCustomObject自定义对象,你看到的输出是该对象默认ToString()方法生成的字符串,但变量本身是对象,不是字符串。两种不同类型的变量直接用-eq比较,结果必然不相等。
解决方法
方法1:直接获取属性值(推荐)
不要用Select Dhcp返回包含属性的对象,而是用-ExpandProperty参数直接提取Dhcp属性的具体值,让$temp2和$temp1(修改为对应属性值)类型一致:
$temp1 = "Disabled" $temp2 = Get-NetIPInterface My_Ethernet | Select-Object -ExpandProperty Dhcp Write-Host "" Write-Host "1" $temp1 Write-Host "2" $temp2 Write-Host "" if ($temp2 -eq $temp1) { Write-Host "IP address is Static " } Else { Write-Host "IP address is Not Static" }
方法2:将对象转为字符串后比较
如果一定要保留$temp1的原始字符串格式,可以把$temp2对象转为字符串再进行比较:
$temp1 = "@{Dhcp=Disabled}" $temp2 = Get-NetIPInterface My_Ethernet | Select-Object Dhcp Write-Host "" Write-Host "1" $temp1 Write-Host "2" $temp2 Write-Host "" if ($temp2.ToString() -eq $temp1) { Write-Host "IP address is Static " } Else { Write-Host "IP address is Not Static" }
补充说明
PowerShell中Write-Host输出对象时,会自动调用对象的ToString()方法生成可读字符串,但这只是显示效果,变量本身的类型和值并没有改变。直接比较不同类型的变量时,-eq运算符会严格区分类型,因此即使显示内容相同,比较结果也会是不相等。
内容的提问来源于stack exchange,提问作者DarkMatter
相关产品推荐
相关产品推荐

