Seite wählen
Verschachteln einer Security Gruppe in eine Office Gruppe im Azure AD via Powershell

Verschachteln einer Security Gruppe in eine Office Gruppe im Azure AD via Powershell

Nehmen wir an, wir syncen unser On-Premise Active Directory zu Azure AD. Man möchte nun möglichst automatisiert die Provisionierung neuer User vornehmen. Dazu gehört auch die Mitgliedschaft in Office Groups. Office Groups werden in allen Microsoft 365 Produkten verwendet um die Berechtigungen zu vergeben. Zum Beispiel für Microsoft Teams, Sharepoint, etc. Das Naheliegenste würde jetzt sein, einfach eine Security Gruppe die aus dem lokalen On-Premise AD ins Azure AD gesynct wird in eine Office Gruppe zu verschachteln. Aber genau das geht nicht: https://office365.uservoice.com/forums/286611-office-365-groups/suggestions/33942997-add-security-groups-to-office-365-groups

Auf der Suche nach einem Workaround bin ich auf die Idee eines Powershell Skripts gekommen, welches alle Member einer Security Gruppe ausliest und diese einzeln in eine Office-Gruppe verschachtelt. Das ganze sieht dann wie folgt aus:

#This script adds all Members from the specified Security Group to one or more Office Groups
#This Script is a workaround as it is not possible to nest a Security Group into a Office Group in Azure AD

#If the Script can't be executed, please Install the Powershell module AzureAD with the Command below:
#Install-Module AzureAD

#Connect to Azure AD - Log in with a Global Admin
Connect-AzureAD

#Security Group: NAME - ObjectID
#1st Office Group: Name - ObjectID
Get-AzureADGroupMember -ObjectId "%SECURITYGROUPOBJECTID%" | ForEach-Object {Add-AzureADGroupMember -ObjectId "%OFFICEGROUPOBJECTID%" -RefObjectId $_.Objectid  }
#2nd Office Group: Name - ObjectID
Get-AzureADGroupMember -ObjectId "%SECURITYGROUPOBJECTID%" | ForEach-Object {Add-AzureADGroupMember -ObjectId "%OFFICEGROUPOBJECTID%" -RefObjectId $_.Objectid  }

Erklärung des Skripts

%SECURITYGROUPOBJECTID%: Die ObjectID aus dem Azure AD der Security Gruppe die aus dem On-Premise AD gesynct wird.

%OFFICEGROUPOBJECTID%: Die ObjectID aus dem Azure AD der Office Gruppe in welche die User zugeteilt werden sollen.

Das Skript kann auch mit einem Scheduled Task automatisiert werden. Dazu müssen die Credentials beim Connect-Befehl mitgegeben werden. Die Zeilen ab Zeile 10 können beliebig oft wiederholt werden.

Wenn das Skript einen User probiert zu verschachteln, welcher schon ein Member ist, wird eine Fehlermeldung ausgegeben, welche ignoriert werden kann:Error Message Powershell AzureAD Applet

Was macht das Skript nicht?

Das Skript fügt nur neue Benutzer hinzu, es entfernt aber keine Benutzer. Wenn ein Benutzer nicht mehr Mitglied einer Security Gruppe ist, wird er weiterhing Member der Office Gruppe sein.

Vorbedingungen

Das Skript muss auf einem Computer ausgeführt werden, welcher Zugriff auf das Azure AD hat. 

WLAN Probleme bei fritz.box mit einfachem Workaround beheben (auch für andere Router anwendbar)

Ich bin mit meiner fritz.box mehr als zufrieden, ausser dass das WLAN regelmässig Verbindungsunterbrüche oder Verbindungsprobleme hat. Ich habe bereits Stunden damit verbracht nach dem Fehler zu suchen, die neusten Updates installiert und bin schlussendlich zum Schluss gekommen, dass nur folgender Workaround mein WLAN-Problem behebt: Ein regelmässiger Neustart der fritz.box.

Router automatisch neu starten

Gewisse Router bieten in den Einstellungen, welche über ein Web-Interface (meist http://192.168.1.1 oder http://192.168.0.1) abrufbar sind, eine Einstellung an, um welche Uhrzeit der Router neu gestartet werden soll. Die fritz.box verfügt darüber leider nicht. Im Internet kursieren verschiedene Linux-Skripts, wie genau mit einem separaten Linux-System (zum Beispiel Synology etc.) mit einem Remote-Command ein Neustart der fritz.box erzwungen werden kann. Aus meiner Sicht ist das aber eine zu komplizierte Lösung, wodurch ich nach alternativen gesucht habe: Eine Zeitschaltuhr.

Mit einer Zeitschaltuhr, an welche ihr das Netzteil der fritz.box anschliesst, lässt sich ganz einfach ein regelmässiger Neustart konfigurieren. Meine fritz.box startet dadurch nun jede Nacht von selbst neu und die Probleme sind dadurch behoben. 

Folgende Zeitschaltuhr setze ich hierzu ein: https://www.digitec.ch/de/s1/product/steffen-timer-digi-zeitschaltuhr-238440

Bei der Auswahl der Zeitschaltuhr sind folgende Dinge zu beachten:

  • Steckeranschluss (falls ihr nicht in der Schweiz wohnt)
  • programmierbarkeit: Kann man zum Beispiel jeden Tag eine andere Zeit einstellen?

Zeitschaltuhr konfigurieren

Die genannte Zeitschaltuhr lässt sich mit der beiliegenden Bedienungsanleitung ganz einfach konfigurieren. Zuerst wähle ich das Tagesschema aus (also an welchen Tagen genau die entsprechende Schaltung vorgenommen werden soll) und konfiguriere dann um 02:00 ein “Aus”-Schaltung. Um 02:01 konfiguriere ich eine “Ein”-Schaltung. So bin ich zwar jeden Tag für ca. 3 Minuten offline, das ist jedoch kein Problem aus meiner Sicht. Ich habe den Zeitpunk so gewählt, dass während dem Neustart keine Backup-Jobs oder automatischen Updates von irgendwelchen Komponenten (in der Nacht machen viele Elektornikgeräte Updates wie zum Beispiel Router, Computer, Server, Smartphone, TV) dadurch beeinflusst werden.

Verschachteln einer Gruppe in eine andere Gruppe aus dem Domain Forest in Active Directory via Powershell

Nehmen wir an, wir haben mehrere Active Directories, die einen Full-Trust haben (dies ist Voraussetzung, dass dies überhaupt funktioniert) und wir möchten nun eine Gruppe aus dem einen Active Directory in eine andere Gruppe aus dem zweiten AD verschachteln. Dies geht via Powershell nur mit Umwegen, da nach meinen Beobachtungen das Powershell-Modul “ActiveDirectory” nicht mit mehreren Domains umgehen kann. Daher müssen wir zuerst alle Informationen einer Gruppe aus dem ersten Active Directory in eine Variable laden und danach entsprechend mit der Variable zusammen im zweiten Active Directory die Verschachtelung vornehmen. Das ganze sieht dann wie folgt aus:

$forestAAAGroup = Get-ADGroup %GROUPNAMECORP% -server corp.company.com
Add-ADGroupMember -server othercorp.company.com -Identity %GROUPNAMEOTHERCORP% -Members $forestAAAGroup

Erklärung des Skripts

%GROUPNAMECORP%: Gruppe, welche schlussendlich in der Gruppe %GROUPNAMEOTHERCORP% verschachtelt, also ein Mitglied von der Gruppe %GROUPNAMEOTHERCORP% sein soll. Muss mit dem Namen der entsprechenden Gruppe vor Ausführung ausgetauscht werden.

%GROUPNAMEOTHERCORP%: siehe oben. Muss mit dem Namen der entsprechenden Gruppe vor Ausführung ausgetauscht werden.

-server: definiert das Active directory, welches angefragt werden soll. Dies muss entsprechend auf die zwei zu verwendenden Active Directories in beiden Zeilen angepasst werden.

Vorbedingungen

Damit das Skript korrekt durchläuft, muss es mit einem berechtigen Domainuser (muss Zugriff aufs Active Directory haben, Powershell muss nicht als Admin ausgeführt werden) auf einem Computer/Server ausgeführt werden, welcher folgende Bedingungen erfüllt:

  • Domain Joined
  • Hat das Powershell Modul “ActiveDirectory” installiert: https://docs.microsoft.com/en-us/powershell/module/addsadministration
    Dieses Modul wird entweder direkt vor dem Skript via Befehl “Import-Module ActiveDirectory” oder via Installation des Windows Features “AD DS and AD LDS Tools”
  • Der Server muss auf beide Active Directories zugreifen können.

Suche nach “ObjektSID” in Active Directory via Powershell

Damit man einen User aufgrund der ObjektSID (objectSID) im Active Directory finden bezw. identifizieren kann, muss man via Powershell-Modul “ActiveDirectory” folgenden Befehl absetzen:

 

$forestAAAGroup = Get-ADGroup %GROUPNAMECORP% -server corp.company.com
Add-ADGroupMember -server othercorp.company.com -Identity %GROUPNAMEOTHERCORP% -Members $forestAAAGroup

Vorbedingungen

Damit das Skript korrekt durchläuft, muss es mit einem berechtigen Domainuser (muss Zugriff aufs Active Directory haben, Powershell muss nicht als Admin ausgeführt werden) auf einem Computer/Server ausgeführt werden, welcher folgende Bedingungen erfüllt:

Mögliche Fehler

Sollte kein Objekt gefunden werden mit der entsprechenden SID, wird ein Fehler ausgegeben:

  • Get-ADUser : Cannot find an object with identity: ‘S-1-5-21-….’

Die Ursache kann sein, dass es sich nicht um ein Userobjekt im Active Directory handelt, sondern zum Beispiel um ein Computer oder eine Gruppe. Dazu müssen verschiedene Powershell-Befehle verwendet werden, siehe hierzu: https://docs.microsoft.com/en-us/powershell/module/addsadministration 
Zum Beispiel für eine Gruppe Get-ADGroup oder für ein Computer Get-ADObject. Der Syntax bleibt dabei jedoch gleich.