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

Get-Module Microsoft.Graph -ListAvailable
Find-Module Microsoft.Graph
Install-Module Microsoft.Graph
Get-Module Microsoft.Graph -ListAvailable

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

Connect-MgGraph -Scope Directory.Read.All
Get-MgContext

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:

Liebe Grüsse
Andres Bohren