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

通过PowerShell配置主DNS服务器设置的问题求助

主DNS地址配置脚本问题解决

问题背景

我正在编写脚本配置主DNS服务器设置,环境包含Windows Server 2016、2019、2022R2混合操作系统,机器既有域加入的也有工作组的,大多配备2块网卡。仅需修改主DNS地址,但尝试以下脚本未成功:

原脚本

$wmi = Get-WMIObject Win32_NetworkAdapterConfiguration -computername localhost | where { $_.IPEnabled -eq "TRUE" -and $_.DNSServerSearchOrder -ne $null }
$dns1 = "101.61.241.311"
$wmi.SetDNSServerSearchOrder("$dns1")

执行输出

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     : 
__DYNASTY        : __PARAMETERS
__RELPATH        : 
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         : 
__NAMESPACE      : 
__PATH           : 
ReturnValue      : 70
PSComputerName   : 

网卡接口信息示例

PSComputerName               : server01
DHCPLeaseExpires             : 
Index                        : 10
Description                  : vmxnet3 Ethernet Adapter
DHCPEnabled                  : False
DHCPLeaseObtained            : 
DHCPServer                   : 
DNSDomain                    : 
DNSDomainSuffixSearchOrder   : {contoso.local}
DNSEnabledForWINSResolution  : False
DNSHostName                  : server01
DNSServerSearchOrder         : {192.168.0.1, 192.168.0.2}
DomainDNSRegistrationEnabled : False
FullDNSRegistrationEnabled   : True
IPAddress                    : {192.168.0.8, fe80::cc2f:c777:11f4:4bbb}
IPConnectionMetric           : 5
IPEnabled                    : True
IPFilterSecurityEnabled      : False
WINSEnableLMHostsLookup      : True

问题分析

  1. 返回值70含义:通常代表权限不足,需以管理员身份运行PowerShell;另外你提供的DNS地址101.61.241.311无效(IP地址段最大为255),这也会导致设置失败。
  2. 参数格式错误:SetDNSServerSearchOrder需要传入数组类型参数,原脚本传入的是字符串,不符合要求。
  3. 批量操作问题:当存在多个网卡时,直接对集合调用方法可能失败,需逐个处理网卡。
  4. WMI cmdlet弃用:Get-WMIObject已被微软弃用,建议使用更兼容新系统的Get-CimInstance。

修正后的脚本

场景1:替换主DNS,保留原有备用DNS

# 获取启用IP的网卡配置
$adapters = Get-CimInstance Win32_NetworkAdapterConfiguration -Filter "IPEnabled = TRUE" | Where-Object { $_.DNSServerSearchOrder -ne $null }
# 注意:请替换为有效的DNS地址
$newPrimaryDNS = "101.61.241.111"

foreach ($adapter in $adapters) {
    # 保留原有备用DNS,仅替换第一个(主)DNS
    $dnsServers = $adapter.DNSServerSearchOrder
    $dnsServers[0] = $newPrimaryDNS
    # 应用配置
    $result = $adapter | Invoke-CimMethod -MethodName SetDNSServerSearchOrder -Arguments @{DNSServerSearchOrder = $dnsServers}
    Write-Host "网卡 [$($adapter.Description)] 设置结果:返回值 $($result.ReturnValue)"
}

场景2:仅设置主DNS,清空备用DNS

$adapters = Get-CimInstance Win32_NetworkAdapterConfiguration -Filter "IPEnabled = TRUE"
$newPrimaryDNS = "101.61.241.111"

foreach ($adapter in $adapters) {
    $result = $adapter | Invoke-CimMethod -MethodName SetDNSServerSearchOrder -Arguments @{DNSServerSearchOrder = @($newPrimaryDNS)}
    Write-Host "网卡 [$($adapter.Description)] 设置结果:返回值 $($result.ReturnValue)"
}

关键注意事项

  • 必须以管理员身份运行PowerShell,否则会出现权限不足(返回值70)。
  • 确保DNS地址格式正确,避免使用如101.61.241.311这类无效IP。
  • 域加入的机器可能受组策略管控,若组策略强制指定DNS,手动修改会被覆盖,需先调整组策略。
  • 多网卡环境下,脚本会对所有启用IP的网卡生效,若需指定特定网卡,可通过Description或Index筛选,例如:
    $adapters = Get-CimInstance Win32_NetworkAdapterConfiguration -Filter "IPEnabled = TRUE" | Where-Object { $_.Description -like "*vmxnet3*" }
    

内容的提问来源于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:50:27