現在、コマンド repadmin /syncall /e [自分の dn] および repadmin /syncall /eP [自分の dn] を使用して、ドメイン コントローラー間のレプリケーションを強制しています。ドメイン コントローラーを同期するために powershell を使用したいと考えていますが、オンラインで表示されるすべての情報は、powershell 内から単に repadmin を呼び出す必要があることを示しています。repadmin /syncall に相当する純粋な PowerShell はありますか?
3 に答える
私は昨年、これを正確に行うためにこの純粋なpowershell関数/スクリプトを書きましたが、ここに投稿された他のPSスニペットの回答がそこから来たようです(褒め言葉と見なします)。それが不可能であると言っている他の投稿は、この ADSI 呼び出しは絶対に正しくありません。実際、私のスクリプトは Repadmin /syncall と同じように完全同期を強制します。単純にテストするとわかるでしょう。私はかなり使用しています。また、デバッグ出力と適切なエラー チェックも行います。MSDN サイトの Pure Powershell スクリプトへのリンクは次のとおりです。
また、単純な展開のために、純粋な powershell スクリプトを MSI インストーラーにパッケージ化した github リポジトリもあります。
https://github.com/CollinChaffin/SyncADDomain
参考になった場合は、回答としてマークしてください。ありがとう!
AFIAK には、repadmin の完全な代替品はありません。単一のオブジェクトを複製Sync-ADObject
できますが、完全な同期はできません。また、そのコマンドレットは Windows 8.1/Windows Server 2012 R2 のみです。Windows Server vNext では、より包括的な AD レプリケーションのサポートが期待されます。
このスクリプトを試してください:
[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')
}
}