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?

  1. Prüft ob eine PowerShell Verbindung zu Azure AD besteht, ansonsten wird abgebrochen
  2. Liest alle Benutzer aus und sucht nach dem angegebenen UserprincipalName (Parameterübergabe)
  3. 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?

  1. Prüft wieder die AzureAD PowerShell Verbindung
  2. Prüft alle Gastbenutzer und gibt aus ob der Benutzer existiert (Anhand der E-Mail Adresse)
  3. Sucht den Userprincipalname des Gastes heraus
  4. 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.

Print Friendly, PDF & Email
  • Was this Helpful ?
  • yes   no