Script : réaliser une synchronisation autoritaire de SYSVOL

Lorsqu’un contrôleur de domaine perd la synchronisation DFSR avec ses camarades, vous pouvez avoir besoin de forcer la réplication initiale de sorte que chaque partenaire se resynchronise. Cet article vous présente un script permettant de le faire rapidement.

<#
    .NOTE
     ================================================
      Auteur  : Loïc VEIRMAN
      Version : 01.00.000
      Script  : Run-ADSysvolAuthoritativeRestore.ps1
     ================================================
    
    .DESCRIPTION
     Ce script force une synchronisation initiale du répertoire SYSVOL sur tous les DCs du domaine. Sans parametre, le DC tenant le role PDC sera choisi comme maitre pour la réplication.

    .PARAMERER MasterDC
     Ce parametre permet d'indiquer le nom du DC (shortname) qui sert de référence pour le répertoire SYSVOL.

#>
param ([String]$MasterDC=$null)

Write-Host (Get-Date -Format "hh:mm:ss") "Initialisation de la synchro initiale forcée - v01.00.000" -ForegroundColor Yellow

#/.Recuperation des contrôleurs de domaine.
$domainControllers = Get-ADDomainController -Filter *

#/.check si on utilise le PDC ou un preféré.
#/.Ceinture et bretelles : si l'option MasterDC retourne une erreur, fallback sur le PDC.
if ($MasterDC)     { $primaryDC = $domainControllers | ? { $_.name -like $MasterDC } }
if (!($primaryDC)) { $Pdc = (Get-ADDomain).PDCEmulator ; $primaryDC = $domainControllers | ? { $_.hostname -like $pdc }
}

Write-Host (Get-Date -Format "hh:mm:ss") "DC de référence : " $primaryDC

#/.Petite pause pour permettre le break si le dc ne convient pas
Start-Sleep -s 5

#/.On arrête le service DFSR sur tous les DC
Write-Host (Get-Date -Format "hh:mm:ss") "Arrêt des services DFSR..." -ForegroundColor Green

foreach ($dc in $domainControllers)
{
    Write-Host (Get-Date -Format "hh:mm:ss") " --> cible :" $dc.name
    Invoke-Command -ComputerName $dc.HostName -ScriptBlock {Stop-Service DFSR}
}
 
#/.On modifie l'AD pour désactiver la réplication SYSVOL et on force une réplication sur le domaine de l'info.
Write-Host (Get-Date -Format "hh:mm:ss") "Arrêt des réplications SYSVOL..." -ForegroundColor Yellow

foreach ($dc in $domainControllers)
{
    Write-Host (Get-Date -Format "hh:mm:ss") " --> cible :" $dc.name

    $sysvolSubscriptionObject = "CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings," + $dc.ComputerObjectDN
    Get-ADObject -Identity $sysvolSubscriptionObject | Set-ADObject -Server $primaryDC -Replace @{"msDFSR-Enabled"=$false}
    #Get-ADDomainController -filter * | foreach {Sync-ADObject -Object $sysvolSubscriptionObject -Source $primaryDC -Destination $_.hostname}
}
$repResult = repadmin /syncall $primaryDC /APed

Write-host (get-Date -Format hh:mm:ss) "Pause de 30s..." -ForegroundColor Magenta
Start-Sleep -Seconds 30
 
# Start and then stop DFSR on all DCs
#/.Démarrage puis arrêt à nouveau du service DFSR sur tous les DC
Write-Host (Get-Date -Format "hh:mm:ss") "Demarrage et arrêt des services DFSR..." -ForegroundColor Yellow

foreach ($dc in $domainControllers)
{
    Write-Host (Get-Date -Format "hh:mm:ss") " --> Cible :" $dc.name
    Write-Host (Get-Date -Format "hh:mm:ss") " ----------> Start" -ForegroundColor Gray
    Invoke-Command -ComputerName $dc.HostName -ScriptBlock {Start-Service DFSR}
    Start-Sleep -Seconds 20
    Write-Host (Get-Date -Format "hh:mm:ss") " ----------> Stop"  -ForegroundColor Gray
    Invoke-Command -ComputerName $dc.HostName -ScriptBlock {Stop-Service DFSR }
}
 
#/.Modification de l'info dans l'AD pour réactiver la réplication SYSVOL et définir le DC de référence, puis pousse l'info à tous les DCs.
Write-Host (Get-Date -Format "hh:mm:ss") "Reconfiguration de l'AD..." -ForegroundColor Yellow
write-host (Get-Date -Format "hh:mm:ss") " --> Configure le DC référant..."

$sysvolSubscriptionObject = "CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings," + $primaryDC.ComputerObjectDN
Get-ADObject -Identity $sysvolSubscriptionObject | Set-ADObject -Server $primaryDC -Replace @{"msDFSR-Options"=1}
 
write-host (Get-Date -Format "hh:mm:ss") " --> Reactive la replication SYSVOL..."
foreach ($dc in $domainControllers)
{
    Write-Host (Get-Date -Format "hh:mm:ss") " ----------> Cible :" $dc.name -ForegroundColor Gray

    $sysvolSubscriptionObject = "CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings," + $dc.ComputerObjectDN
    Get-ADObject -Identity $sysvolSubscriptionObject | Set-ADObject -Server $primaryDC -Replace @{"msDFSR-Enabled"=$true}
    #Get-ADDomainController -filter * | foreach {Sync-ADObject -Object $sysvolSubscriptionObject -Source $primaryDC -Destination $_.hostname}
}
$RepResult = repadmin /syncall $primaryDC /APed

Write-host (get-Date -Format hh:mm:ss) "Pause de 30s..." -ForegroundColor Magenta
Start-Sleep -Seconds 30

#/.Redemarre DFSR sur tous les DCs.
Write-Host (Get-Date -Format "hh:mm:ss") "Relance les services DFSR..." -ForegroundColor Yellow

foreach ($dc in $domainControllers)
{
    Write-Host (Get-Date -Format "hh:mm:ss") " --> Cible :" $dc.name
    
    Invoke-Command -ComputerName $dc.HostName -ScriptBlock {Start-Service DFSR}
}

#/.Le mot de la fin
Write-host
Write-Host "Syncro forcée terminée : vous pouvez maintenant lancer une réplication SYSVOL avec DFSRDIAG /POLLAD" -ForegroundColor Green
Write-host

Lien Permanent pour cet article : https://ms-sec.fr/?p=2803

Laisser un commentaire

Your email address will not be published.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.