怎么用脚本获取域控制器信息

wen 实用脚本 2

本文目录导读:

怎么用脚本获取域控制器信息

  1. PowerShell 脚本(推荐)
  2. CMD 命令脚本
  3. VBScript 脚本
  4. 使用 WMI 查询
  5. 综合脚本(输出到文件)
  6. 注意事项

获取域控制器信息可以通过多种脚本语言实现,以下是几种常见的方法:

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"

注意事项

  1. 权限要求:获取域控制器信息通常需要域用户权限,某些信息可能需要管理员权限
  2. 模块加载:使用 PowerShell 的 AD 模块需要先导入:
    Import-Module ActiveDirectory
  3. 远程访问:某些命令可能需要网络连通性和适当防火墙设置

推荐使用 PowerShell 脚本,因为它最灵活且信息最完整。

抱歉,评论功能暂时关闭!