目前我们正在使用命令repadmin / syncall / e [我们的dn]和repadmin / syncall / eP [我们的dn]来强制域控制器之间的复制。我想使用powershell来同步域名控制器,但我在网上看到的所有内容都表明我必须简单地从powershell中调用repadmin,这对我来说似乎很好,并且像管道录制一些东西而不是正确行事。是否有任何PURE powershell equivelant of repadmin / syncall?
答案 0 :(得分:2)
我去年写过这个纯粹的powershell函数/脚本来完成这一点,看起来这可能就是其他PS贴片回答的地方来自(我将作为恭维)。另一篇文章说这是不可能的绝对不正确这个ADSI调用和我的脚本实际上强制完全同步就像Repadmin / syncall只是测试它,你会看到 - 我使用它相当多。它还可以调试输出和正确的错误检查。以下是MSDN网站上Pure Powershell脚本的链接:
和github repo我甚至将纯PowerShell脚本打包到MSI安装程序中以进行简单部署:
https://github.com/CollinChaffin/SyncADDomain
如果您觉得有用,请标记为答案。谢谢!
答案 1 :(得分:1)
AFIAK没有完全替代repadmin。 Sync-ADObject
会让你replicate a single object,但不会让你完全同步。此外,该cmdlet仅适用于Windows 8.1 / Windows Server 2012 R2。我希望在Windows Server vNext中支持更全面的AD复制。
答案 2 :(得分:0)
尝试使用此脚本:
[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')
}
}
答案 3 :(得分:0)
Collin的答案很棒,但为了澄清,有时原生工具比在PowerShell中重新发明轮子更好。
robocopy就是一个很好的例子。 repadmin / syncall是另一个,恕我直言。
PowerShell的一个好处是你可以将Cmdlet,本土函数,第三方模块,.NET库,C#代码或二进制文件粘合在一起。
不要试图将自己限制为Cmdlet。在可用时使用它们很好,但有时本机工具更好,或者可以包装在您自己的函数中以提供更多的PowerShell-y体验(example)。
干杯!