本文目录导读:

获取域控制器信息可以通过多种脚本语言实现,以下是几种常见的方法:
PowerShell 脚本(推荐)
获取基础域控制器信息
# 获取所有域控制器
Get-ADDomainController -Filter * | Select-Object Name, Site, IPAddress, OperatingSystem, IsGlobalCatalog, IsReadOnly
# 获取当前登录用户的域控制器
$env:LOGONSERVER
# 获取域控制器详细信息
Get-ADDomainController -Filter * | Format-Table -Property Name, Site,
IPv4Address, OperatingSystem, ServerRole, IsGlobalCatalog,
IsReadOnly, Enabled -AutoSize
使用.NET类获取信息
# 获取域控制器的IP地址
[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().DomainControllers |
ForEach-Object {
[PSCustomObject]@{
Name = $_.Name
Site = $_.Site.Name
IPAddress = ($_.IPAddress -join ', ')
OSVersion = $_.OSVersion
CurrentTime = $_.CurrentTime
Roles = ($_.Roles -join ', ')
}
}
获取域控制器角色信息
# 获取FSMO角色持有者
Get-ADDomainController -Filter * |
Where-Object {$_.OperationMasterRoles} |
Select-Object Name, OperationMasterRoles
# 更详细的信息
$domainControllers = Get-ADDomainController -Filter *
foreach ($dc in $domainControllers) {
Write-Host "=== DC: $($dc.Name) ==="
Write-Host "Site: $($dc.Site)"
Write-Host "IP: $($dc.IPv4Address)"
Write-Host "OS: $($dc.OperatingSystem)"
Write-Host "Global Catalog: $($dc.IsGlobalCatalog)"
Write-Host "Read Only: $($dc.IsReadOnly)"
Write-Host "Roles: $($dc.OperationMasterRoles -join ', ')"
Write-Host "`n"
}
CMD 命令脚本
使用 nltest 命令
@echo off echo ========== 域控制器信息 ========== nltest /dclist:%USERDOMAIN% echo. echo ========== 当前域控制器 ========== nltest /dsgetdc:%USERDOMAIN% echo. echo ========== 域控制器状态 ========== nltest /dsgetsite pause
使用 dsquery 命令
@echo off echo ========== 域控制器列表 ========== dsquery server -domain %USERDOMAIN% echo. echo ========== 域控制器详细信息 ========== dsquery * "cn=servers,cn=%USERDOMAIN%,cn=computers,dc=%USERDOMAIN%" -attr cn dnsHostName operatingSystem description pause
VBScript 脚本
' 获取域控制器信息
Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.Get("defaultNamingContext")
Set objDomain = GetObject("LDAP://" & strDomain)
WScript.Echo "域名: " & objDomain.Get("dc")
' 获取域控制器列表
Set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCmd = CreateObject("ADODB.Command")
Set objCmd.ActiveConnection = objConn
objCmd.CommandText = _
"<LDAP://" & strDomain & ">;(objectClass=computer);" & _
"cn,operatingSystem,dNSHostName;subtree"
Set objRS = objCmd.Execute
WScript.Echo vbCrLf & "域控制器列表:"
Do Until objRS.EOF
WScript.Echo "计算机名: " & objRS.Fields("cn").Value
WScript.Echo "DNS名: " & objRS.Fields("dNSHostName").Value
WScript.Echo "操作系统: " & objRS.Fields("operatingSystem").Value
WScript.Echo "------------------------"
objRS.MoveNext
Loop
objConn.Close
使用 WMI 查询
PowerShell WMI 方法
# 通过WMI获取域控制器信息
Get-WmiObject -Class Win32_ComputerSystem |
Select-Object Name, Domain, DomainRole, PartOfDomain
# 获取域控制器的网络配置
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName (Get-ADDomainController).HostName |
Where-Object {$_.IPEnabled -eq $true} |
Select-Object Description, IPAddress, DefaultIPGateway, DNSServerSearchOrder
综合脚本(输出到文件)
# 完整信息输出脚本
$outputFile = "DC_Info_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
"域控制器信息报告" | Out-File $outputFile
"生成时间: $(Get-Date)" | Out-File $outputFile -Append
"=" * 50 | Out-File $outputFile -Append
$dcs = Get-ADDomainController -Filter *
foreach ($dc in $dcs) {
"`n域控制器: $($dc.Name)" | Out-File $outputFile -Append
"Site: $($dc.Site)" | Out-File $outputFile -Append
"IP地址: $($dc.IPv4Address)" | Out-File $outputFile -Append
"操作系统: $($dc.OperatingSystem)" | Out-File $outputFile -Append
"全局编录: $($dc.IsGlobalCatalog)" | Out-File $outputFile -Append
"只读: $($dc.IsReadOnly)" | Out-File $outputFile -Append
"角色: $($dc.OperationMasterRoles -join ', ')" | Out-File $outputFile -Append
"状态: $(if ($dc.Enabled) {'启用'} else {'禁用'})" | Out-File $outputFile -Append
}
Write-Host "信息已保存到: $outputFile"
注意事项
- 权限要求:获取域控制器信息通常需要域用户权限,某些信息可能需要管理员权限
- 模块加载:使用 PowerShell 的 AD 模块需要先导入:
Import-Module ActiveDirectory
- 远程访问:某些命令可能需要网络连通性和适当防火墙设置
推荐使用 PowerShell 脚本,因为它最灵活且信息最完整。