Get SamAccountName from Azure Active Directory by PowerShell

Hallo zusammen,

Für ein Projekt musste ich aus dem Azure Active Directory den SamAccountName auslesen.

Das Problem ist nur, dass dieses Property nicht so einfach über die PowerShell Module abgefragt werden kann. Hier das Beispiel vom MSOnline Modul

Get-MsolUser -UserPrincipalName a.bohren@icewolf.ch | fl

Auch beim PowerShell Modul AzureAD gibt es dieses Property nicht.

Get-AzureADUser -SearchString "a.bohren@icewolf.ch" | fl

Man kann dies jedoch über den Graph Explorer, sprich über das Graph API abfragen.

https://graph.microsoft.com/v1.0/users/a.bohren@icewolf.ch?$select=userPrincipalName,onPremisesSamAccountName

Um das ganze mit PowerShell abzufragen braucht es eine App Registration im Azure AD. Dort benötigt man das "User.Read.All" recht und einen Admin Consent.

 Mit folgendem Code holt man sich den Accesstoken

$AppId = '449e6fed-e858-437e-ba9f-769773106786'
$AppSecret = 'geheimesAppSecret'
$Scope = "https://graph.microsoft.com/.default"
$TenantName = "icewolfch.onmicrosoft.com"
$Url = "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token"
 
# Create body
$Body = @{
    client_id = $AppId
    client_secret = $AppSecret
    scope = $Scope
    grant_type = 'client_credentials'
}
 
# Splat the parameters for Invoke-Restmethod for cleaner code
$PostSplat = @{
    ContentType = 'application/x-www-form-urlencoded'
    Method = 'POST'
    # Create string by joining bodylist with '&'
    Body = $Body
    Uri = $Url
}
 
# Request the token!
$Request = Invoke-RestMethod @PostSplat
$AccessToken = $request.access_token

Nun kann das Query abgesetzt werden

#SamaccountName V1
$headers = @{"Authorization" = "Bearer "+ $AccessToken}
$uri = "https://graph.microsoft.com/v1.0/users/a.bohren@icewolf.ch/?$select=userPrincipalName,onPremisesSamAccountName"
$AADUser = Invoke-RestMethod -Method GET -Uri $uri -Headers $headers
$AADUser
$AADUser.onPremisesSamAccountName

Wie es scheint, ist das Property aber erst in der Graph Beta API drin

#SamaccountName BETA
$headers = @{"Authorization" = "Bearer "+ $AccessToken}
$uri = "https://graph.microsoft.com/beta/users/a.bohren@icewolf.ch/?$select=userPrincipalName,onPremisesSamAccountName"
$AADUser = Invoke-RestMethod -Method GET -Uri $uri -Headers $headers
$AADUser
$AADUser.onPremisesSamAccountName

Für mich ein bisschen verwirrend, dass der Graph Explorer die V1 API anzeigt und dort das Property zurück liefert.

Liebe Grüsse
Andres Bohren