-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReplicate-Domain.ps1
70 lines (59 loc) · 1.81 KB
/
Replicate-Domain.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Sync-Domain
# -Domain Domain to sync
# -Site Site to sync
# -List List sites and domains
param(
$Domain,
$Site,
[Switch] $AllSites,
[Switch] $List,
[Switch] $Help
)
if ($Help) {
Write-Host "Sync-Domain"
Write-Host " -Domain (Optional) Domain to sync"
Write-Host " -Site (Optional) Site to sync"
Write-Host " -AllSites (Optional) Replicate domain controllers across all sites"
Write-Host " -List (Optional) List sites and domains"
Return
}
If ($List) {
$ForestContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext("Forest")
$Forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
# List Sites
$SiteNames = $Forest | Select -Expand Sites
Write-Host "Sites:"
$SiteNames | % { Write-Host " $($_.Name)" }
Write-Host
# List Domains
$DomainNames = $Forest | Select -Expand Domains
Write-Host "Domains:"
$DomainNames | % { Write-Host " $($_.Name)" }
Return
}
if ($Domain) {
$DomainContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext("Domain",$Domain)
$Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($DomainContext)
}
else {
$Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
}
if ($Site) {
$ForestContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext("Forest")
$Site = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::FindByName($ForestContext, $Site)
}
else {
$Site = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite()
}
if ($AllSites) {
$DCs = $Domain.FindAllDomainControllers()
}
else {
$DCs = $Domain.FindAllDomainControllers($Site.Name)
}
$DCs | % {
Write-Host "Replicating $($_.Name) ... " -NoNewLine
$null = repadmin /kcc $_.Name
$null = repadmin /syncall /A $_.Name
Write-Host "Done"
}