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