You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:18:11