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

PowerShell过滤多值ServerAddresses获取非企业DNS地址问题

问题分析

你的原命令逻辑存在漏洞:ServerAddresses是一个数组,当直接用$_.serveraddresses -notlike "*10.*"时,PowerShell会对数组每个元素分别判断并返回布尔数组。只要数组里有一个元素满足-notlike条件,整个表达式就会被视为$true,导致同时包含企业DNS(10.、148.)和运营商DNS的条目被错误保留。

你需要的是**过滤掉所有包含10.或148.类IP的网卡DNS配置,只保留ServerAddresses中全为运营商IP的条目。

修正后的命令

兼容所有PowerShell版本的写法

Get-DnsClientServerAddress | Where-Object {
    $_.InterfaceAlias -eq "Ethernet" -and
    (@($_.ServerAddresses) | Where-Object { $_ -like "*10.*" -or $_ -like "*148.*" }).Count -eq 0
}

PowerShell 7+简洁写法

Get-DnsClientServerAddress | Where-Object {
    $_.InterfaceAlias -eq "Ethernet" -and
    $_.ServerAddresses -NotAny { $_ -like "*10.*" -or $_ -like "*148.*" }
}

命令说明

  1. 先筛选出网卡别名是Ethernet的条目
  2. 对每个条目的ServerAddresses数组做校验:
    • 兼容写法:过滤出所有匹配企业DNS规则的IP,若结果数量为0,说明该网卡的DNS全是运营商IP,保留此条目
    • 简洁写法:-NotAny会直接检查数组中是否没有任何元素满足企业DNS规则,返回布尔值判断是否保留

内容的提问来源于stack exchange,提问作者Johnny Cakes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:47:01