首页 > 解决方案 > 根据一般命名约定过滤 NIC

问题描述

我正在尝试构建一个脚本来远程更改我们在远程服务器上使用的 DNS 服务器。我被卡住了。我想出了这个来列出 NIC 的别名:

$server = "servername"
$interfaces = Get-WmiObject Win32_NetworkAdapter -ComputerName $server
$interfaces | ForEach{
    $aliasname = $_ | ForEach-Object { $_.NetConnectionID }
    $name = $_.GetRelated("Win32_PnPEntity") | Select-Object -ExpandProperty Name
    foreach($name in $aliasname){
        Get-WmiObject Win32_NetworkAdapterConfiguration -computername $server | select $name, Description, IPAddress, DNSServerSearchOrder |  Format-Table -AutoSize
    }
} 

但问题是我只想更改一个 NIC 的 DNS,不同服务器上的 NIC 可能具有相似的名称,但并不总是完全相同。它也可能并不总是相同编号的 NIC。我想用一些东西来排除错误的网卡,所以我尝试了类似的东西

    foreach($name in $aliasname | Where-Object -Property $name -contains "WhatIAmLookingFor"){
        Get-WmiObject Win32_NetworkAdapterConfiguration -computername $server | select $name, Description, IPAddress, DNSServerSearchOrder |  Format-Table -AutoSize
    }
}

但它仍然返回两个 NIC。我已经尝试了很多方法来使它排除我不想更改的 NIC,只包括我想要的一个,但我通常要么一无所获,要么得到两个 NIC。我也知道大多数人会说试试

Get-WmiObject Win32_NetworkAdapterConfiguration-Filter 'IpEnabled=True' -computername $server

或者

$nic = @(Get-WmiObject Win32_NetworkAdapterConfiguration-Filter 'IpEnabled=True' -computername $server)[0]

但问题是除了遵循一般命名约定之外,没有任何服务器网卡是标准的。因此,选择 IpEnabled=True 可能会导致我还更改用于连接到不属于我公司的网络的 NIC。与仅选择第一个 NIC 相同。非常感谢您对此问题的任何帮助。

标签: powershelldnswindows-server-2008-r2

解决方案


$server = "servername"
$excludedNic= "nic to exclude"
$interfaces = Get-WmiObject Win32_NetworkAdapter -ComputerName $server -Filter "NetConnectionID!='$($excludedNic)'"
foreach($interface in $interfaces){
    if($null -ne $interface.NetConnectionID){
        Get-WmiObject Win32_NetworkAdapterConfiguration -computername $server -Filter "Description='$($interface.name)' " |Select-Object @{Name='NicName'; Expression={$interface.NetConnectionID}},  Description, IPAddress, DNSServerSearchOrder
    }
}


推荐阅读