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.
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.