筛选NIC以符合常规命名约定

时间:2019-06-19 12:52:47

标签: powershell dns windows-server-2008-r2

我正在尝试构建脚本以远程更改我们在远程服务器上使用的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。我想使用某些东西来排除错误的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,但是我通常什么也得不到,也没有得到两个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相同。非常感谢您对此问题的任何帮助。

1 个答案:

答案 0 :(得分:0)

$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
    }
}