Public/Invoke-ADReplication.ps1
Function Invoke-ADReplication { [CmdletBinding(DefaultParameterSetName="All")] param ( # Parameter to invoke replication against all Domain Controllers. [Parameter(Mandatory=$false, ParameterSetName="All")] [switch] $All, # Name of the specific Domain Controller. [Parameter(Mandatory=$false, ParameterSetName="DomainController", Position=1)] [string[]] $DomainController ) process { if ($PSCmdlet.ParameterSetName -eq "All") { $DomainControllers = (Get-ADDomainController -filter *).name $LastRepTime = (Get-ADReplicationUpToDatenessVectorTable -Target $DomainControllers[0]).LastReplicationSuccess[0] Write-Output "Last replication time was at - $LastRepTime" foreach ($DC in $DomainControllers) { try { Write-Output "Invoking replication against $DC" [void](Invoke-Command -ComputerName $DC -ScriptBlock { cmd.exe /c repadmin /syncall /A /d /e /P } -InDisconnectedSession -ErrorAction Stop) } catch { Write-Error "$_" } } } elseif ($PSCmdlet.ParameterSetName -eq "DomainController") { $FindDomainController = (Get-ADDomainController -filter * | Where-Object {$_.Name -eq "$DomainController"}).Name Find-EmptyString -VariableName $FindDomainController -ErrorOut "Cannot an find Domain Controller object that matches name $DomainController" -Action Stop $LastRepTime = (Get-ADReplicationUpToDatenessVectorTable -Target $FindDomainController).LastReplicationSuccess[0] Write-Output "Last replication time was at - $LastRepTime" try { Write-Output "Invoking replication against $FindDomainController" [void](Invoke-Command -ComputerName $FindDomainController -ScriptBlock { cmd.exe /c repadmin /syncall /A /d /e /P } -InDisconnectedSession -ErrorAction Stop) } catch { Write-Error "$_" } } } } |