【问题标题】:Filter NICs for general naming convention根据一般命名约定过滤 NIC
【发布时间】:2019-11-02 05:17:20
【问题描述】:

我正在尝试构建一个脚本来远程更改我们在远程服务器上使用的 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 相同。非常感谢您对此问题的任何帮助。

【问题讨论】:

  • 在第一个代码块中,您使用$name = $_.GetRelated(...) 定义变量$name。但是,您可以通过使用与 foreach 循环中最左边的变量 foreach($name in $aliasname) 相同的变量来立即销毁它。在那里使用不同的变量名。
  • 因为这是 Server 2008R2 你有什么 Powershell 版本?它们在 v2 和 v5 之间发生了很大变化
  • 如果您知道需要更改的 dms 服务器 ip 地址,则可以使用此 DNS ip 获取 NIC 并替换它
  • 这是 v5。感谢您的建议,我更改了变量。它也按照我的方式工作。它似乎没有覆盖变量,但我可以看到它看起来可能有。
  • Victor 我知道 NIC 的 DNS 我需要更改我将如何过滤?

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


【解决方案1】:
$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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2011-06-17
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多