筛选符合通用命名规范的NIC,远程修改DNS服务器脚本求助
解决远程筛选特定命名规范网卡并修改DNS的问题
我明白你的痛点——服务器网卡命名不统一,不能靠固定索引或简单的IpEnabled=True来筛选,怕误改第三方网络的配置。之前的筛选逻辑出错了,我来帮你修正并给出可行方案:
先分析你之前的筛选错误
你写的这段筛选代码逻辑有问题:
foreach($name in $aliasname | Where-Object -Property $name -contains "WhatIAmLookingFor"){...}
这里的-Property $name是错误的——-Property需要传入固定的属性名(比如NetConnectionID),而不是循环变量$name(此时$name还没被赋值,筛选条件等于无效,所以会返回所有结果)。
正确的解决方案:按通用命名关键词精准筛选
核心思路是:直接针对网卡配置的NetConnectionID(也就是你说的“别名”)进行模糊匹配,同时结合IpEnabled=True确保是活跃的网卡,避免筛选到禁用或非IP网卡。
步骤1:定义基础参数
先把服务器名和你的目标网卡关键词(比如“公司内网”“Corp”这类通用命名标识)定义好:
$server = "servername" # 替换成你的网卡通用命名关键词,支持模糊匹配 $targetNicKeyword = "WhatIAmLookingFor"
步骤2:精准筛选目标网卡配置
直接查询Win32_NetworkAdapterConfiguration并筛选符合条件的网卡:
# 获取所有启用IP且别名包含目标关键词的网卡配置 $targetNicConfig = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $server | Where-Object { $_.IpEnabled -eq $true -and # 用-match做模糊匹配,支持正则,比如多个关键词可以写 "(Corp|Internal)" $_.NetConnectionID -match $targetNicKeyword }
步骤3:验证筛选结果(关键!先确认再修改)
先输出筛选到的网卡信息,确保是你要修改的目标:
$targetNicConfig | Select-Object NetConnectionID, Description, IPAddress, DNSServerSearchOrder | Format-Table -AutoSize
步骤4:修改DNS服务器配置
确认筛选结果正确后,调用SetDNSServerSearchOrder方法修改DNS:
if ($targetNicConfig) { # 替换成你的目标DNS服务器地址数组 $dnsServers = @("192.168.1.10", "192.168.1.11") # 执行DNS修改 $result = $targetNicConfig.SetDNSServerSearchOrder($dnsServers) # 检查执行结果(ReturnValue=0表示成功) if ($result.ReturnValue -eq 0) { Write-Host "✅ 成功修改服务器 $server 上的网卡 [$($targetNicConfig.NetConnectionID)] 的DNS配置" } else { Write-Warning "❌ 修改失败,返回错误码:$($result.ReturnValue)" } } else { Write-Warning "⚠️ 在服务器 $server 上未找到符合命名规范的目标网卡" }
额外优化建议
- 如果你的通用命名有多个关键词,可以用正则匹配多个规则,比如:
$_.NetConnectionID -match "(公司内网|Corp-LAN|Internal)" - 建议先在测试服务器上验证筛选逻辑,确认无误后再批量执行
- 确保你有远程服务器的管理员权限,且远程服务器的WinRM服务已启用(WMI依赖WinRM)
内容的提问来源于stack exchange,提问作者sam.solo.works
相关产品推荐
相关产品推荐

