需求来源:某个组织的Active Directory域,其中的一部分域控制器的SRV记录会无缘无故的丢掉,dcdiag检查dns的时候,发现一大堆报错,看到报错基本就不想弄了,实在太多……
PowerShell可以快速的创建A记录和DNS记录。
我们看一下标准的SRV记录是什么样子的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
PS C:\>
Get-WmiObject
-Namespace root\MicrosoftDNS -class microsoftdns_srvtype | ? {
$_
.DnsServerName
-eq
"dc.contoso.com"
}
__GENUS : 2
__CLASS : MicrosoftDNS_SRVType
__SUPERCLASS : MicrosoftDNS_ResourceRecord
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : MicrosoftDNS_SRVType.ContainerName=
"_msdcs.contoso.com"
,DnsServerName=
"DC.contoso.com"
,DomainName=
"_tcp.Default-First-Site-Name._sites.dc._msdcs.contoso.com"
,OwnerName=
"_kerberos.
_tcp.Default-First-Site-Name._sites.dc._msdcs.contoso.com"
,RecordClass=1,RecordData=
"0 100 88 dc2.contoso.com."
__PROPERTY_COUNT : 18
__DERIVATION : {MicrosoftDNS_ResourceRecord, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : DC
__NAMESPACE : root\MicrosoftDNS
__PATH : \\DC\root\MicrosoftDNS:MicrosoftDNS_SRVType.ContainerName=
"_msdcs.contoso.com"
,DnsServerName=
"DC.contoso.com"
,DomainName=
"_tcp.Default-First-Site-Name._sites.dc._msdcs.contoso.com
"
,OwnerName=
"_kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs.contoso.com"
,RecordClass=1,RecordData=
"0 100 88 dc2.contoso.com."
Caption :
ContainerName : _msdcs.contoso.com
Description :
DnsServerName : DC.contoso.com
DomainName : _tcp.
Default
-First-Site-Name._sites.dc._msdcs.contoso.com
InstallDate :
Name :
OwnerName : _kerberos._tcp.
Default
-First-Site-Name._sites.dc._msdcs.contoso.com
Port : 88
Priority : 0
RecordClass : 1
RecordData : 0 100 88 dc2.contoso.com.
SRVDomainName : dc2.contoso.com.
Status :
TextRepresentation : _kerberos._tcp.
Default
-First-Site-Name._sites.dc._msdcs.contoso.com
IN
SRV 0 100 88 dc2.contoso.com.
Timestamp : 3633513
TTL : 600
Weight : 100
PSComputerName : DC
|
我们注意一下,有用的地方是如下几行
1
2
3
4
5
|
ContainerName : _msdcs.contoso.com
DnsServerName : DC.contoso.com
OwnerName : _kerberos._tcp.
Default
-First-Site-Name._sites.dc._msdcs.contoso.com
RecordData : 0 100 88 dc2.contoso.com.
TextRepresentation : _kerberos._tcp.
Default
-First-Site-Name._sites.dc._msdcs.contoso.com
IN
SRV 0 100 88 dc2.contoso.com.
|
首先要说明的就是容器名,这里主要是注意,msdcs这个容器。另外dnsservername就是当前需要操作的域控制器名。
在TextRepresentation : _kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs.contoso.com IN SRV 0 100 88 dc2.contoso.com. 这句中,则包含了我们要手动输入的所有信息。
我们构造一句话,最后一句就实现了目标功能
1
2
3
4
|
$dnsServerName
=
"dc.contoso.com"
$containerName
=
"_msdcs.contoso.com"
$mydns
=
[WMIClass]
"ROOT\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
$mydns
.CreateInstanceFromTextRepresentation(
$dnsServerName
,
$containerName
,_kerberos._tcp.
Default
-First-Site-Name._sites
IN
SRV 0 100 88 dc3332.contoso.com.)
|
最后再来完善一下,在非5大角色的域控制器上运行 dcdiag /test:dns /s:domainname /v 看一下dns输出记录。可以添加相应条目
1
2
3
4
5
6
7
8
9
10
11
|
#脚本需要在PowerShell中运行,首先打开cmd,然后输入PowerShell。 最后在脚本当前目录,输入 .\xxxx.ps1
$hostdc
=
Read-Host
“(请输入需要添加SRV记录的域控制器的netbios名)”
$dnsServerName
=
"dc.contoso.com"
$containerName
=
"_msdcs.contoso.com"
$containerName2
=
"contoso.com"
$site
=
"Default-First-Site-Name"
#此处输入站点名
$mydns
=
[WMIClass]
"ROOT\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
#增加 “DC”“站点”中的kerberos的tcp srv记录
$mydns
.CreateInstanceFromTextRepresentation(
$dnsServerName
,
$containerName
,
"_kerberos._tcp.$site._sites.dc IN SRV 0 100 88 $hostdc"
)
|select
RR
#增加“GC”“站点”中的tcp ldap记录
$mydns
.CreateInstanceFromTextRepresentation(
$dnsServerName
,
$containerName
,
"_ldap._tcp.$site._sites.gc IN SRV 0 100 88 $hostdc"
)
|select
RR
|
本文转自 九叔 51CTO博客,原文链接:http://blog.51cto.com/jiushu/1672103,如需转载请自行联系原作者