目前我们使用命令 repadmin /syncall /e [our dn] 和 repadmin /syncall /eP [our dn] 来强制域控制器之间的复制。我想使用 powershell 来同步域控制器,但我在网上看到的所有内容都表明我必须简单地从 powershell 中调用 repadmin,这对我来说似乎是做作的,就像管道胶带一样,而不是正确地做。是否有任何与 repadmin /syncall 等效的 PURE powershell?
5170 次
3 回答
2
我去年写了这个纯 powershell 函数/脚本来做到这一点,看起来这可能就是这里发布的其他 PS 片段答案的来源(我将作为恭维)。另一篇文章说这是不可能的,这个 ADSI 调用是绝对不正确的,我的脚本实际上确实强制完全同步,就像 Repadmin /syncall 一样简单地测试它,你会看到 - 我经常使用它。它还进行调试输出和正确的错误检查。这是 MSDN 站点上 Pure Powershell 脚本的链接:
以及 github 存储库,我什至将纯 powershell 脚本打包到 MSI 安装程序中以进行简单部署:
https://github.com/CollinChaffin/SyncADDomain
如果您觉得有帮助,请标记为答案。谢谢!
于 2015-05-22T18:07:34.620 回答
1
AFIAK 没有完全替代 repadmin。Sync-ADObject
将允许您复制单个对象,但不会让您进行完全同步。此外,该 cmdlet 仅适用于 Windows 8.1/Windows Server 2012 R2。我希望 Windows Server vNext 提供更全面的 AD 复制支持。
于 2015-02-02T18:12:48.620 回答
1
试试这个脚本:
[CmdletBinding()]
Param([switch]$AllPartitions)
$myDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain();
ForEach ($dc in $myDomain.DomainControllers) {
$dcName = $dc.Name;
$partitions = @();
if ($AllPartitions) {
$partitions += $dc.Partitions;
} else {
$partitions += ([ADSI]"").distinguishedName;
}
ForEach ($part in $partitions) {
Write-Host "$dcName - Syncing replicas from all servers for partition '$part'"
$dc.SyncReplicaFromAllServers($part, 'CrossSite')
}
}
于 2015-02-03T00:28:21.690 回答