当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在域控制器备份蓬勃发展之前发现它

作者:精品下载站 日期:2024-12-14 13:15:27 浏览:14 分类:玩电脑

在域控制器备份蓬勃发展之前发现它


每个人都同意域控制器备份很重要。即使像 Active Directory 这样的多主机服务也应该定期备份。即使您在遍布世界各地的各种服务器上拥有 Active Directory 数据库和 SYSVOL 的副本,但这并不意味着您应该简单地忽略备份。根据复制间隔,一个错误的更改可能会快速传播到整个 Active Directory 环境!

了解域控制器备份的工作原理

如何确定 Active Directory 是否已“备份”?

由于 Active Directory 从技术上讲存在于许多服务器(域控制器)上,因此您可以在每个域控制器上备份 Active Directory 数据库。您甚至还可以更精细地备份单个命名上下文或分区。

每次在域控制器上备份分区时,该事件都会记录在 DC 上。然后您可以使用repadmin 实用程序查询该日期。

Repadmin 是 DC 上 Windows Server 2008 及更高版本中内置的实用程序,用于围绕 Active Directory 执行许多不同的管理功能。 repadmin的功能之一是查找Active Directory数据库中每个分区的最后备份时间。

您可以看到,如果您只是运行 repadmin.exe /showbackup 它将查询本地主机上每个分区的备份时间。在本例中,我直接在域控制器上运行它。但是,您不必这样做。从整个林中的所有域控制器获取此信息以更全面地了解域控制器的备份状态会更有利。

为此,我们需要 Windows PowerShell 及其 Active Directory
模块的帮助。 Active Directory 模块有一个名为 Get-ADForest 的便捷 cmdlet,可以轻松枚举林中存在的所有域。 Get-ADForest 输出的属性之一称为 Domains

PS51> $domains = (Get-ADForest).Domains

现在我们有了森林中的域列表。接下来,我们需要找到每个域中的所有域控制器。为此,我们可以使用 Get-ADDomainController cmdlet。

$domainControllers = ($domains | foreach { Get-ADDomainController-Server $_ -Filter * }).HostName

接下来,我们将每个域控制器传递给 repadmin 实用程序,以查找每个域控制器上每个 Active Directory 分区的上次备份时间。

PS51> $backups = $domainControllers | foreach { repadmin.exe /server $_ }

这将为我们提供当前林中所有域中每个域控制器上每个分区的域控制器备份日期的粗略输出。

但是,正如您从 repadmin /showbackup 输出中看到的那样,输出并不那么漂亮,而且可能难以阅读。为此,我将使用 PowerShell 的字符串解析功能和一些正则表达式来获得更美观的输出。

## Loop through each domain controller
$domainControllers | foreach {
    $backups = repadmin.exe /showbackup $_
    
    ## Capture the output ofrepadmin
    $output = @{ 'DomainController' = $_ }
    
    ## Start collectingproperties for output
    for ($i = 0; $i -lt $backups.Count; $i++) { ## Begin looking atrepadmin output
        if ($backups[$i] -match '^(CN|DC)') { ## If the line has apartition.
            ## Assign the partition name and the date/time to the output hashtable
            ## and send $output with the DomainController, Partition and DateTime
            $output.Partition = $backups[$i]
            $output.DateTime = [regex]::Match($backups[$i +2],'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})').Groups[1].Value
            [pscustomobject]$output
        }
    }
}

这将为您提供一个更加美观的域控制器备份报告。

概括

使用repadmin命令行实用程序和一点点PowerShell-fu,您可以找到所有域控制器的最后一次备份时间。这一切都通过 PowerShell 以格式良好、面向对象的设计返回给您。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯