PowerShell:为每个 SRV 记录显示两个 A 记录 - 而应该只有一个
PowerShell: Two A records are shown for each SRV record - when there should only be one
有一种奇怪的情况,下面的 PowerShell 脚本为每条 SRV 记录显示两条 A 记录 - 而实际上应该只有一条 A 每条 SRV 条记录。示例输出:
如果您运行在您的环境中使用 Active Directory,只需 运行 下面的 PowerShell 脚本,您应该会得到相同的结果。输出文件将在您的桌面上。我已经多次重写这个脚本,经过多次试验和错误,仍然得到相同的结果。知道为什么 A 记录被列出两次,以及如何让它只显示一次?
# Show Active Directory SRV records by Site
$logpath = "$ENV:UserProfile\Desktop\"
####################################################
#find date and convert to string
$date=((Get-Date).ToString('yyyy-MM-dd-HH-mm-ss'))
#defines the path where to find the log file of this script
$Logfile = $logpath+$date+".log"
#convert date and time to string
$date=((Get-Date).ToString('yyyy-MM-dd-HH-mm-ss'))
#get addomain
$domain = ((Get-WmiObject Win32_ComputerSystem).Domain)
#get all sites
$sites = (([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites).Name)
Function Write-Log
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
Write-Log "Domainname: $domain"
Write-Log "-------------"
foreach ($site in $sites){
$srv = (Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain | ft Name,Type,NameTarget,Port | Out-String)
Write-Log "Sitename: $site"
Write-Log "-------------"
Write-Log "$srv"
}
两者之间可能存在一些差异 A-Records,但由于此处的这一行,您错过了它们。
$srv = (Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain |
ft Name,Type,NameTarget,Port | Out-String)
这里的ft
命令是Format-Table
的别名,默认参数是select的Columns列表。在那个 selection 中,您只保留这些字段:
- 姓名
- 类型
- 名称目标
- 端口
现在,可能还有很多其他字段我们没有看到,我希望其中之一包含一些独特的不同值。所以我建议你 运行 这个看看它有什么不同。 (也许这个设备有两个网络接口,它们都有不同的 IP,因此它们都从 DHCP 获得了它们自己的一组 DNS 设置)
Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain | format-list
这将显示所有字段,您可以弄清楚为什么有两条记录。
经过反复试验,这正是我所需要的。变化:
$srv = (Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain | ft Name,Type,NameTarget,Port | Out-String)
至:
$srv = (Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain | select-object -First 2 | ft Name,Type,NameTarget,Port | Out-String)
说明:select-object 的使用允许 trim 从结果对象数组中删除行。
有一种奇怪的情况,下面的 PowerShell 脚本为每条 SRV 记录显示两条 A 记录 - 而实际上应该只有一条 A 每条 SRV 条记录。示例输出:
如果您运行在您的环境中使用 Active Directory,只需 运行 下面的 PowerShell 脚本,您应该会得到相同的结果。输出文件将在您的桌面上。我已经多次重写这个脚本,经过多次试验和错误,仍然得到相同的结果。知道为什么 A 记录被列出两次,以及如何让它只显示一次?
# Show Active Directory SRV records by Site
$logpath = "$ENV:UserProfile\Desktop\"
####################################################
#find date and convert to string
$date=((Get-Date).ToString('yyyy-MM-dd-HH-mm-ss'))
#defines the path where to find the log file of this script
$Logfile = $logpath+$date+".log"
#convert date and time to string
$date=((Get-Date).ToString('yyyy-MM-dd-HH-mm-ss'))
#get addomain
$domain = ((Get-WmiObject Win32_ComputerSystem).Domain)
#get all sites
$sites = (([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites).Name)
Function Write-Log
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
Write-Log "Domainname: $domain"
Write-Log "-------------"
foreach ($site in $sites){
$srv = (Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain | ft Name,Type,NameTarget,Port | Out-String)
Write-Log "Sitename: $site"
Write-Log "-------------"
Write-Log "$srv"
}
两者之间可能存在一些差异 A-Records,但由于此处的这一行,您错过了它们。
$srv = (Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain |
ft Name,Type,NameTarget,Port | Out-String)
这里的ft
命令是Format-Table
的别名,默认参数是select的Columns列表。在那个 selection 中,您只保留这些字段:
- 姓名
- 类型
- 名称目标
- 端口
现在,可能还有很多其他字段我们没有看到,我希望其中之一包含一些独特的不同值。所以我建议你 运行 这个看看它有什么不同。 (也许这个设备有两个网络接口,它们都有不同的 IP,因此它们都从 DHCP 获得了它们自己的一组 DNS 设置)
Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain | format-list
这将显示所有字段,您可以弄清楚为什么有两条记录。
经过反复试验,这正是我所需要的。变化:
$srv = (Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain | ft Name,Type,NameTarget,Port | Out-String)
至:
$srv = (Resolve-DnsName -Type SRV _ldap._tcp.$site._sites.$domain | select-object -First 2 | ft Name,Type,NameTarget,Port | Out-String)
说明:select-object 的使用允许 trim 从结果对象数组中删除行。