-
Notifications
You must be signed in to change notification settings - Fork 3
/
Sync-Groups-Admins.ps1
104 lines (77 loc) · 3.58 KB
/
Sync-Groups-Admins.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
param(
[string]$DIR = (Get-Location)
)
if ($DIR -match '.+?\\$') {
$DIR = $DIR.Substring(0, $DIR.Length-1)
}
if (Test-Path -Path "$DIR\password.txt") {
$username = "[email protected]"
$secPasswordText = Get-Content "$DIR\password.txt"
$secPassword = $secPasswordText | ConvertTo-SecureString
$credentials = New-Object System.Management.Automation.PSCredential ($username, $secPassword)
}
if (!$credentials) {
$credentials = Get-Credential
}
Connect-AzureAD -Credential $credentials | Out-Null
# remove existing Exchange Remote Sessions if any
Get-PSSession | Where-Object {$_.ComputerName -eq "outlook.office365.com"} | Remove-PSSession
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $credentials -Authentication Basic -AllowRedirection
Import-PSSession $session
if (!$?) {
throw "Failed to import Exchange Remote Session"
}
# Alle Gruppen initalisieren
$alleGruppen = @{
# Alle Gruppen + Verteiler werden mit ihrer Object-ID initalisiert:
# "Gruppe1" = "Object-ID"
# "Verteiler1Gruppe1" = "Object-ID"
}
# Moderatoren zum Verteiler zuordnen: Verteiler = Moderatoren
$groupMatchingModeration = @{
# Zum Beispiel:
# "Verteiler1Gruppe1" = "Gruppe1"
}
# Besitzer zum Verteiler zuordnen: Verteiler = Besitzer
$groupMatchingBesitzer = @{
# Zum Beispiel:
# "Verteiler1Gruppe1" = "Gruppe1"
}
# Gruppenbesitzer ernennen
$groupMatchingBesitzer.GetEnumerator() | ForEach-Object{
# Zu besetzende Gruppe initalisieren
$zubesetzendeGruppe = $_.name
$zubesetzendeGruppeID = $alleGruppen[$zubesetzendeGruppe]
$aktuelleBesitzer = New-Object System.Collections.ArrayList
foreach ($group in $_.Value) {
# Aktuelle als Besitzer berechtigt
$aktuelleBesitzerZwischenspeicher = Get-DistributionGroupMember -Identity $alleGruppen[$group]
$aktuelleBesitzer.Add($aktuelleBesitzerZwischenspeicher) | out-null
}
# Berechtigte als Gruppenbesitzer festlegen
Set-DistributionGroup $zubesetzendeGruppeID -ManagedBy $aktuelleBesitzer.PrimarySmtpAddress -BypassSecurityGroupManagerCheck
Write-Host "Aus der Gruppe " $group " wurden alle zu Besitzern von " $zubesetzendeGruppe
# Ausgabe aktueller/ neuer Besitzer
Write-Host "Aktuelle Besitzer für " $zubesetzendeGruppe ": "
$neueBesitzer = Get-DistributionGroup -Identity $zubesetzendeGruppeID
$neueBesitzer.ManagedBy | ft
}
# Gruppenmoderatoren ernennen
$groupMatchingModeration.GetEnumerator() | ForEach-Object{
# Zu moderierende Gruppen initalisieren
$zuModerierendeGruppe = $_.name
$zuModerierendeGruppeID = $alleGruppen[$zuModerierendeGruppe]
$aktuelleModeratoren = New-Object System.Collections.ArrayList
foreach ($group in $_.Value) {
# Aktuelle als Moderatoren berechtigt
$aktuelleModeratorenZwischenspeicher = Get-DistributionGroupMember -Identity $alleGruppen[$group]
$aktuelleModeratoren.Add($aktuelleModeratorenZwischenspeicher) | out-null
}
# Berechtigte zur moderierenden Gruppe als Moderatoren hinzufügen
Set-DistributionGroup $zuModerierendeGruppeID -ModerationEnabled $true -ModeratedBy $aktuelleModeratoren.PrimarySmtpAddress -BypassSecurityGroupManagerCheck
Write-Host "Aus der Gruppe " $group " wurden alle zu Moderatoren von " $zuModerierendeGruppe
# Ausgabe aktueller/ neuer Moderatoren
Write-Host "Aktuelle Moderatoren für " $zuModerierendeGruppe ": "
$neueModeratoren = Get-DistributionGroup -Identity $zuModerierendeGruppeID
$neueModeratoren.ModeratedBy | ft
}