【问题标题】:PowerShell script to remove existing DNS entries and setting new entry on Alternative Preferred DNS on NIC card用于删除现有 DNS 条目并在 NIC 卡上的备用首选 DNS 上设置新条目的 PowerShell 脚本
【发布时间】:2018-12-30 15:10:10
【问题描述】:
$net = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true -ComputerName . |
       Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS* |
       Where-Object {$_.DNSServerSearchOrder -like "10.*"}
$num = $net.DNSServerSearchOrder
$num.Length
for ($i=0; $i -lt $num.Length; $i++) {
    if(Test-Connection $num[$i] -Count 1 -ErrorAction silentlycontinue) {
    } else {
        $net.SetDNSServerSearchOrder[$i]"<correct IP>"
    }
}

我不确定上面的代码是否让我进入了写入路径。我正在尝试为大约 13000 多台服务器构建代码,我们需要检查服务器上配置的 DNS 是否正确。

为此,我使用了一个测试服务器,我试图在其中放置一些代码,这些代码将首先转到已启用的 NIC,然后检查 DNS 是否已配置。在for 循环中,我正在迭代直到DNS 数组的长度。如果对 DNS 条目进行 ping 测试,我在 for 循环内部已经对齐。如果 DNS ping 它不必执行任何其他操作,则需要删除所有 DNS 并仅将辅助 DNS 设置为主 DNS 工作正常。有什么建议吗?

【问题讨论】:

  • 旁注:使用Get-WmiObject -ComputerName . 毫无意义。默认情况下,该 cmdlet 将查询本地计算机。
  • 谢谢 Ansgar 是的,我正在测试机器上测试。

标签: powershell dns powershell-2.0


【解决方案1】:

如有疑问,请阅读documentationSetDNSServerSearchOrder() 是一种方法,而不是属性。您可以使用要配置的 DNS 服务器 IP 地址数组来调用它。

$newNameserver = '8.8.4.4'
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter 'IPEnabled=True' |
    ForEach-Object {
        $dnsServers = $_.DNSServerSearchOrder[0], $newNameserver
        $_.SetDNSServerSearchOrder($dnsServers)
    }

调整过滤器(和 DNS 服务器列表)以满足您的要求。

检查已配置的 IP 地址是否响应 ping 是没有意义的。要么它们是正确的名称服务器,那么即使它们(暂时)无法访问,也不应更改地址,或者它们不是正确的名称服务器,那么无论如何你都需要定义正确的。

【讨论】:

  • 我们的域中有许多其他 DNS 条目,因此我需要保持第一个条目不变,并且需要更新辅助条目并删除所有其他条目。我已经测试了当 i=0 时会跳过第一个 IP 的第一个 ping,但是当 i=1 时它应该转到 else 然后删除 num[$i=1,2,3...] 的 IP 并获得一个新的应删除 num[$i=1] 个 restIP 上的 IP。
  • @IshanSharma 所以,基本上你想保留第一个名称服务器,更改第二个,然后删除其他所有内容?
  • 没错..这就是我想要解释的:D
  • 这是我想要做的:当 i=0 时,“如果”条件为真,它什么也不做。当 i =1 时,“if”条件为真,它什么也不做,如果失败,将跳到“else”,应首先删除 num[$i=1] 的 IP,并在 num[$i= 1]。当 i=2 时,“if”条件为真,它什么也不做,如果它失败,它应该被删除。因此,每次在前两次迭代之后,即当 i=2,3.4... 时,如果 IP ping 不应该执行任何操作,如果 ping 状态失败,它应该只删除 IP。
  • 我在下面有一个查询是针对所有已启用的 NIC 吗?如果我们有很多 NIC,如果在启用的 NIC 上配置,查询应该首先检查 DNS IP,如果 true 进一步执行任务,该怎么办? Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter 'IPEnabled=True'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
相关资源
最近更新 更多