【发布时间】: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