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

通过PowerShell调用WMI获取DNS配置时的重复及空值问题

解决PowerShell WMI获取DNS配置的重复值与空值问题

问题原因

  • ComputerName重复:Get-WmiObject返回了多个启用IP的网络适配器对象,直接访问$Result.DNSHostname会将所有适配器的主机名拼接成数组,若多个适配器对应同一主机名,就会出现重复值。
  • DNSServerSearchOrder含空值:某个启用IP的适配器的DNS服务器配置中存在空条目,导致结果数组混入$null。

修正方案

方案1:按单个适配器输出配置(保留每个适配器的独立信息)

遍历每个适配器对象,单独生成输出,同时过滤DNS服务器列表中的空值:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled = 'True'" -Property DNSServerSearchOrder,DNSHostname | ForEach-Object {
    [PSCustomObject]@{
        ComputerName          = $_.DNSHostname
        DNSServerSearchOrder  = $_.DNSServerSearchOrder | Where-Object { $_ -ne $null }
    }
}

方案2:合并所有适配器的配置(去重+去空)

提取唯一主机名,合并并过滤DNS服务器列表:

$Result = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled = 'True'" -Property DNSServerSearchOrder,DNSHostname
[PSCustomObject]@{
    ComputerName          = $Result.DNSHostname | Select-Object -Unique
    DNSServerSearchOrder  = $Result.DNSServerSearchOrder | Where-Object { $_ -ne $null } | Select-Object -Unique
}

原脚本问题说明

原脚本直接将整个结果集的属性赋值给单个PSObject的属性,导致属性值变为数组:

  • 多个适配器的主机名重复时,数组出现重复元素;
  • 部分适配器的DNS服务器配置有空值时,数组混入$null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:45:24