The estimated reading time 4 minutes
Sobald man mit Cloud Diensten (speziell mit AzureAD) hantiert, kommt es immer wieder vor, dass man Abfragen ob ein Benutzer bereits vorhanden ist oder nicht. Ich musste mich diesem Szenario ebenfalls schon stellen. Nach dieser Erfahrung dachte ich mir, dass dies sicherlich noch mehr Leute brauchen könnten. Also habe ich meine Lösung hier online gestellt, die somit in allen möglichen Skripten verwendet werden kann.
Prüfen eines normalen AzureAD Benutzers:
Function Check-AzureUser()
{
param(
[Parameter(Mandatory=$true)][string]$UserPrincipalName
)
## check if azure AD connection is already established (if not quit function)
try {
Write-Host "Checking if Azure AD Connection is established..." -ForegroundColor Yellow
$azconnect = Get-AzureADTenantDetail -ErrorAction Stop
$displayname = ($azconnect).DisplayName
write-host "Azure AD connection established to Tenant: $displayname " -ForegroundColor Green
}
catch {
write-host "No connection to Azure AD was found. Please use Connect-AzureAD command" -ForegroundColor Red
break
}
## check if user exists in azure ad
#check if upn is not empty
if($UserPrincipalName){
$UserPrincipalName = $UserPrincipalName.ToString()
$azureaduser = Get-AzureADUser -All $true | Where-Object {$_.Userprincipalname -eq "$UserPrincipalName"}
#check if something found
if($azureaduser){
Write-Host "User: $UserPrincipalName was found in $displayname AzureAD." -ForegroundColor Green
return $true
}
else{
Write-Host "User $UserPrincipalName was not found in $displayname Azure AD " -ForegroundColor Red
return $false
}
}
}
Was tut diese kleine Funktion?
- Prüft ob eine PowerShell Verbindung zu Azure AD besteht, ansonsten wird abgebrochen
- Liest alle Benutzer aus und sucht nach dem angegebenen UserprincipalName (Parameterübergabe)
- Wenn ein Benutzer gefunden wird gibt die Funktion „TRUE“ zurück ansonsten „FALSE“
Wie kann das Ganze nun verwendet werden? Das ist relativ einfach. Zunächst muss die Funktion in PowerShell ausgeführt werden, danach kann die Funktion mit folgendem Parameter gestartet werden:
Check-AzureUser emailadresse@domain.de
Erweitert kann das Ganze so aussehen:
$user = "userexists@it-koehler.com" if(Check-AzureUser $user){ Write-Host "Do something with this user $user.." -ForegroundColor Green } else{ Write-Host "Break the script" -ForegroundColor Red }
Wie gesagt, gibt die Funktion ein „TRUE“ zurück, somit kann dies in einer gewönlichen IF Abfrage verwendet werden. Siehe Beispiel oben.
Prüfen eines AzureAD Gästebenutzers
Manchmal ist es auch erforderlich zu prüfen, ob es einen Gastbenutzer bereits gibt, oder ob dieser dann eingeladen werden soll. Deshalb habe ich folgenden Funktion dafür geschrieben.
Function Check-AzureGuestUser(){
param(
[Parameter(Mandatory=$true)][string]$Mailaddress
)
try {
Write-Host "Checking if Azure AD Connection is established..." -ForegroundColor Yellow
$azconnect = Get-AzureADTenantDetail -ErrorAction Stop
$displayname = ($azconnect).DisplayName
write-host "Azure AD connection established to Tenant: $displayname " -ForegroundColor Green
}
catch {
write-host "No connection to Azure AD was found. Please use Connect-AzureAD command" -ForegroundColor Red
break
}
$guestuser = Get-AzureADUser -Filter "userType eq 'Guest'" -All $true | Where-Object {$_.Mail -eq "$Mailaddress"}
if($guestuser){
$guestemail = ($guestuser).Mail
$guestupn = ($guestuser).Userprincipalname
#check if something found
Write-Host "GuestUser: $guestupn was found in $displayname AzureAD." -ForegroundColor Green
return $true
}
else{
Write-Host "User $UserPrincipalName was not found in $displayname Azure AD " -ForegroundColor Red
return $false
}
}
Was macht diese Funktion?
- Prüft wieder die AzureAD PowerShell Verbindung
- Prüft alle Gastbenutzer und gibt aus ob der Benutzer existiert (Anhand der E-Mail Adresse)
- Sucht den Userprincipalname des Gastes heraus
- Gibt ein „TRUE“ bei gefundenem Benutzer zurück ansonsten „FALSE“
Auch hier kann diese Funktion sehr einfach angetestet werden:
Check-AzureGuestUser guest@gmail.com
Ein weiterer Anwendungsfall zur Verdeutlichung.
$user = "guest@gmail.com"
if(Check-AzureGuestUser $user){
Write-Host "Do something with this user $user.." -ForegroundColor Green
}
else{
Write-Host "Break the script" -ForegroundColor Red
}
Die Benutzung ist also nicht sehr kompliziert.
Kombiniere beide Funktionen
Es kann auch vorkommen, dass man gerne wissen möchte ob es eine E-Mail Adresse im Tenant gibt (egal ob Benutzer oder Gast). Das wird auch interessant wenn mehr viele Domänen in den Tenant integriert hat. Aus diesem Grund habe ich die beiden Funktionen in eine kleine Foreach Abfrage gepackt. Schaut es euch an:
$azusers = "notexisting@it-koehler.com","existing@it-koehler.com","existguest@web.de","notexistguest@gmail.com"
foreach($azuser in $azusers ){
if(Check-AzureUser -UserPrincipalName "$azuser"){
Write-Host "$azuser is an AzureAD User" -ForegroundColor Green
}
else{
if(Check-AzureGuestUser -Mailaddress "$azuser"){
Write-Host "$azuser is a guest user"
}
else{
Write-Host "User $azuser was not found in azure ad, checked azure ad user and guest user" -ForegroundColor Gray
}
}
}
Der gezeigte Code prüft ob es einen AzureAD Benutzer gibt, falls nicht werden die Gäste geprüft. Wenn es keine Übereinstimmung gibt. Die Funktionen sind nicht sehr kompliziert und können beliebig verwendet werden beim Anlegen neuer Benutzer oder Gäste.
Wenn euch der Artikel gefallen hat, dann klickt auf „Helpful“, oder schreibt mir gerne einen Kommentar.
Viel Spaß beim Probieren.