Die Microsoft.Graph PowerShell Module ausprobiert
Hallo zusammen,
Da das Azure AD PowerShell Modul wohl längerfristig nicht weiterentwickelt wird, habe ich mir mal die neue Alternative dazu angeschaut.
Microsoft Lays Out Future for Azure AD PowerShell Module
https://office365itpros.com/2021/06/03/microsoft-lays-out-future-azure-ad-powershell-module/
Get started with the Microsoft Graph PowerShell SDK
https://docs.microsoft.com/en-us/graph/powershell/get-started
Find-Module Microsoft.Graph

Wie viel da zur Verfügung steht, sieht man anhand von folgendem command
Get-Command -Module Microsoft.Graph.* | Measure

Es gibt fast für alles ein PowerShell Modul
Get-Module -Name Microsoft.Graph.* -ListAvailable

Verbinden kann ich mich ganz einfach mit
Connect-MgGraph





Die Vorhandenen Endpoints kann ich mir mit folgendem Befehl anzeigen lassen
Get-MgEnvironment

Man kann sich auch über einen spezifischen Scope verbinden

Und über ein Zertifikat kann man sich ebenfalls verbinden
$TenantId = "icewolfch.onmicrosoft.com"
$AppID = "c1a5903b-cd73-48fe-ac1f-e71bde968412" #DelegatedMail
$CertificateThumbprint = "3B42F63204F0F54F6E4CB9CF96E365513C913C2B"
Connect-MgGraph -ClientId $AppId -CertificateThumbprint $CertificateThumbprint -TenantId $TenantId

Um auf die Beta Befehle zu wechseln, gibt man folgendes ein
Select-MgProfile -Name "beta"
Get-MgProfile

Wie man verbunden ist und welche Scopes zur Verfügung stehen sieht man mit folgendem Befehl
Get-MgContext

Mit dem Get-MgUser kann ich beispielsweise nach Guest Accounts oder nach einem bestimmten Vornamen suchen
Get-MgUser -Filter "userType eq 'Guest'"
Get-MgUser -Search "givenName:Andres" -ConsistencyLevel "eventual"

Dasselbe gilt auch für Contacts
Get-MgContact -Search "givenName:Andres" -ConsistencyLevel "eventual"
Get-MgContact -Search "givenName:Andres" -ConsistencyLevel "eventual" | fl

Bei den Filtern hat mir folgende Seite geholfen https://docs.microsoft.com/en-us/graph/query-parameters#encoding-query-parameters

Get-MgGroup -Filter "startswith(Displayname,'AAD')"
Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')"
Get-MgGroup -Filter "startswith(displayName,'Demo')"

Allerdings haben bei mir die "endswith" und "contains" Filterparameter nicht funktioniert
Get-MgGroup -Filter "endswith(displayName,'Team')"
Get-MgGroup -Filter "contains(displayName,'Demo')"

Bei Gruppen will man ja häufig die GroupMembers auflisten
Get-MgGroupmember -GroupId c9da2027-a296-4ba4-abb7-4bf88d1a9849 | fl
(Get-MgGroupmember -GroupId c9da2027-a296-4ba4-abb7-4bf88d1a9849).AdditionalProperties
Get-MgGroupmember -GroupId c9da2027-a296-4ba4-abb7-4bf88d1a9849 | ForEach-Object { Get-MgUser -UserId $_.Id }

Auch die Lizenz eines Benutzers lässt sich einfach herausfinden
Get-MgUserLicenseDetail -UserId a.bohren@icewolf.ch

Zum Schluss muss man sich natürlich abmelden
Disconnect-MgGraph

Fazit:
Die meisten Dinge sind einfach. Wenn man schon ein bisschen mit Microsoft Graph gearbeitet hat kommt man mit den meisten Commands recht schnell zurecht. Denke mit dem Filtern und Suchen muss ich mich noch ein bisschen näher beschäftigen. Wenn jemand Tipps dazu hat - nur her damit!
Weitere infos:
- Managing with Microsoft Graph (and PowerShell) - John Savill
https://www.youtube.com/watch?v=bF8vkzXJsAY - Exploring the new Microsoft Graph PowerShell Module(s) - Nicola Suter
https://tech.nicolonsky.ch/exploring-the-new-microsoft-graph-powershell-modules/
