积极答复者
VBS或者Powershell更新DNS zone下的A记录

问题
答案
-
您好!
感谢您的回复。
是这样的,因为您是在计划任务中执行,每隔30秒执行一次,所以相当于外围已经是个循环,那中间执行部分用上述分支语句就已经可以实现我们的目的。可以把 Else 部分去除,仅仅是供参考的(目的是提供一个默认值,如果3个都不通的话)。假设第一次100不通,则DNS会更新为101或者102;过30秒(计划任务的时间),再次查询的时候,发现100通了,则会更新为100
如果您偏向于使用 foreach 来实现,可以辅以 break来跳出循环。以下的语句可以和上述分支实现类似的功能,供您参考。
因为不确定以前有几条@的A记录,所以先执行Remove语句,是为了简化脚本。
$servers = "10.1.1.20", "10.1.1.30", "10.1.1.10"
$zone = "oa.sc.com"
Remove-DnsServerResourceRecord -ZoneName $zone -RRType "A" -Name "@" -Force
foreach ($s in $servers)
{
If (Test-Connection -computername $s -Quiet)
{
Add-DnsServerResourceRecord -ZoneName $zone -A -Name "@" -IPv4Address $s
break
}
}
如果您有任何疑问,请您及时告知我。
Regards,
Alex Zhu
-----------------------------------------------
如果回复有帮助, 请记住将其标记为答案。
如果您有有关 technet 订阅者支持的反馈, 请联系 tnmff@microsoft.com.- 已标记为答案 小龙技术问答 2019年6月20日 2:36
全部回复
-
您好!
感谢您的上贴。
可以尝试以下的PowerShell 语句:
if (-not (Test-Connection -computername "192.168.2.100" -Quiet)) {
Remove-DnsServerResourceRecord -ZoneName "oa.sc.com" -RRType "A" -Name "@" -RecordData "192.168.2.100" -Force
Add-DnsServerResourceRecord -ZoneName "oa.sc.com" -A -Name "@" -IPv4Address "192.168.2.101"
}
说明:
1,如果在DNS中名称是“(与父文件夹相同)”,则使用“@”作为名称
2,test-connection 会发送4个封包给目标计算机,类似于 ping 命令,在失败后,才会执行下面的操作,需要等待一小段时间,直至命令完成。
3,在DNS服务器进行修改后,客户端需要执行 ipconfig /flushdns 来进行刷新
截图如下(供您参考):
运行前:
运行界面:
运行后:
如果您有任何疑问,请您及时告知我。
Regards,
Alex Zhu
-----------------------------------------------
如果回复有帮助, 请记住将其标记为答案。
如果您有有关 technet 订阅者支持的反馈, 请联系 tnmff@microsoft.com.- 已编辑 AlexZhu_775Microsoft contingent staff 2019年6月19日 5:48
-
您好,如果按照我的需求执行的话,需要执行三条语句,请帮忙优化一下脚本,谢谢
$ipaddr1="192.168.2.100"
$ipaddr2="192.168.2.101"
$ipaddr3="192.168.2.102"
$zname="oa.ixmsoft.com"
if (-not (Test-Connection -computername $ipaddr1 -Quiet)) {
Remove-DnsServerResourceRecord -ZoneName $zname -RRType "A" -Name "@" -RecordData $ipaddr1 -Force
Add-DnsServerResourceRecord -ZoneName $zname -A -Name "@" -IPv4Address $ipaddr2
}
if (-not (Test-Connection -computername $ipaddr2 -Quiet)) {
Remove-DnsServerResourceRecord -ZoneName $zname -RRType "A" -Name "@" -RecordData $ipaddr2 -Force
Add-DnsServerResourceRecord -ZoneName $zname -A -Name "@" -IPv4Address $ipaddr3
}
if (Test-Connection -computername $ipaddr1 -Quiet) {
Remove-DnsServerResourceRecord -ZoneName $zname -RRType "A" -Name "@" -RecordData $ipaddr2 -Force
Add-DnsServerResourceRecord -ZoneName $zname -A -Name "@" -IPv4Address $ipaddr1
} -
您好!
感谢您的回复。
我理解了下您的意思:就是这三台机器中,哪一台可以ping通,DNS就设置为哪一台。可以使用以下的脚本实现:
test.ps1 内容如下:
Remove-DnsServerResourceRecord -ZoneName "oa.sc.com" -RRType "A" -Name "@" -Force
If (Test-Connection -computername "192.168.2.100" -Quiet) {
Add-DnsServerResourceRecord -ZoneName "oa.sc.com" -A -Name "@" -IPv4Address "192.168.2.100"
}
ElseIf (Test-Connection -computername "192.168.2.101" -Quiet) {
Add-DnsServerResourceRecord -ZoneName "oa.sc.com" -A -Name "@" -IPv4Address "192.168.2.101"
}
ElseIf (Test-Connection -computername "192.168.2.102" -Quiet) {
Add-DnsServerResourceRecord -ZoneName "oa.sc.com" -A -Name "@" -IPv4Address "192.168.2.102"
}
Else {
Add-DnsServerResourceRecord -ZoneName "oa.sc.com" -A -Name "@" -IPv4Address "192.168.2.100"
}
如果您有任何疑问,请您及时告知我。
Regards,
Alex Zhu
-----------------------------------------------
如果回复有帮助, 请记住将其标记为答案。
如果您有有关 technet 订阅者支持的反馈, 请联系 tnmff@microsoft.com. -
您好!
感谢您的回复。
是这样的,因为您是在计划任务中执行,每隔30秒执行一次,所以相当于外围已经是个循环,那中间执行部分用上述分支语句就已经可以实现我们的目的。可以把 Else 部分去除,仅仅是供参考的(目的是提供一个默认值,如果3个都不通的话)。假设第一次100不通,则DNS会更新为101或者102;过30秒(计划任务的时间),再次查询的时候,发现100通了,则会更新为100
如果您偏向于使用 foreach 来实现,可以辅以 break来跳出循环。以下的语句可以和上述分支实现类似的功能,供您参考。
因为不确定以前有几条@的A记录,所以先执行Remove语句,是为了简化脚本。
$servers = "10.1.1.20", "10.1.1.30", "10.1.1.10"
$zone = "oa.sc.com"
Remove-DnsServerResourceRecord -ZoneName $zone -RRType "A" -Name "@" -Force
foreach ($s in $servers)
{
If (Test-Connection -computername $s -Quiet)
{
Add-DnsServerResourceRecord -ZoneName $zone -A -Name "@" -IPv4Address $s
break
}
}
如果您有任何疑问,请您及时告知我。
Regards,
Alex Zhu
-----------------------------------------------
如果回复有帮助, 请记住将其标记为答案。
如果您有有关 technet 订阅者支持的反馈, 请联系 tnmff@microsoft.com.- 已标记为答案 小龙技术问答 2019年6月20日 2:36