13 min read
Lizenzen und Microsoft Graph PowerShell
Das Microsoft Graph SDK PowerShell-Modul ersetzt zwei andere Module. Erfahre mehr darüber, wie du dich mit Graph...
ScriptRunner Blog
Die ein oder andere Hürde steht Nutzern im Weg, wenn sie anfangen Graph zu nutzen. In drei Teilen liefert Damian Hilfe. Bevor die Themen Teams und Exchange behandelt werden, geht es hier los mit dem Thema Graph SDK (Software Development Kit).
Beim Schreiben dieses Artikels stellte sich die Frage: Wo anfangen? Graph ist eine interessante Mischung aus Sicherheit, Geheimhaltung und Macht in einem Paket, meint der Autor, selbst langjähriger PowerShell-Benutzer (man denke nur an Monad). Aus der Sicherheitsperspektive zeigt das am wenigsten privilegierte Modell, dass Graph über sehr granulare Berechtigungen verfügt, mit denen man realistischerweise ein strengeres Regiment führen kann. Andererseits könnten Nutzer, die an das weniger granulare RBAC-Berechtigungsmodell gewöhnt sind, diese Granularität als abschreckend empfinden. Hinzu kommt das Fehlen eines vollständigen Hilfesystems für alle Cmdlets, die für Graph verfügbar sind. Manchmal ist es entweder eine Schatzsuche oder reines Glück, ein brauchbares Cmdlet zu finden. Wenn wir diese Hürde überwunden haben, sehen wir, welche Möglichkeiten uns in Bezug auf die Sicherheit, die Verfügbarkeit von Cmdlets und die Aufgaben, die mit einem Modul ausgeführt werden können, zur Verfügung stehen. In diesem Artikel werden wir uns mit Graph und den Möglichkeiten der PowerShell-Konnektivität beschäftigen und zeigen, wie man sie im Test- und Produktivsystem einsetzt (du hast hoffentlich einen Tenant zum Testen?).
Um sich mit der Graph API zu verbinden, verwenden wir eines dieser Cmdlets:
Connect-MgGraph
Oder
Connect-Graph
Eigentlich gibt es keinen Unterschied zwischen den beiden, aber Connect‑MgGraph ist ein Cmdlet, während Connect‑Graph ein Alias ist, der auf Connect‑MgGraph verweist.
Bei Graph wird das Modell mit den wenigsten Berechtigungen verwendet. Wenn wir also eine Verbindung ohne weitere Parameter herstellen, werden keine Berechtigungen oder Rollen zugewiesen. Mit den Basisberechtigungen können wir nicht viel mehr tun, als einige grundlegende Ressourcen und Objekte in Graph abzufragen. Um mehr aus Graph herauszuholen, brauchen wir die richtigen Berechtigungen. Als nächstes werden wir uns ansehen, wie man das macht.
Hier kann die Verbindung zu Graph kompliziert werden. Die Berechtigungen für deine Aufgabe zu definieren, kann einige Arbeit und Experimente erfordern, da eine Aufgabe mehr oder weniger Berechtigungen benötigen kann, als ursprünglich erwartet. Wenn die Verbindung über eine Azure-Anwendung mit zertifikatsbasierter Authentifizierung hergestellt wird, müssen möglicherweise auch die vordefinierten Berechtigungen angepasst werden. Sehen wir uns ein Beispielszenario an.
Für unser Szenario möchten wir eine Liste der Anwendungen abrufen, die in Azure für einen Tenant registriert sind. Das zu verwendende Cmdlet lautet:
Find-MgGraphCommand Get-MgApplication
Ausgabe
Die Ausgabe des Cmdlets Find-MgGraphCommand enthält eine Verbindungs-URL und die Berechtigungen, die zum Ausführen des Cmdlets erforderlich sind.
Es gibt eine Spalte namens Permissions, die eine Eigenschaft dieses Cmdlets ist und die erforderlichen Berechtigungen speichert. Im Folgenden wird die vollständige Liste der Berechtigungen für dieses Cmdlet angezeigt:
Find-MgGraphCommand (Get-MgApplication).Permissions
Berechtigungen
Beachte, dass es zwei Gruppen von Berechtigungen gibt, die auf den verschiedenen URIs basieren, die für die Verbindung verwendet werden. Wenn wir Anwendungen auflisten wollen, benötigen wir nur die Berechtigung Application.Read.All. Wie verwenden wir diese?
Sobald wir wissen, welche Berechtigungen wir benötigen, können wir diese bei einer neuen Verbindung zu Graph angeben:
Connect-MgGraph -Scopes Application.Read.All
Wenn du diese Berechtigung zum ersten Mal verwendest, erscheint ein Pop-up-Fenster (Permissions requested), in dem du gefragt wirst, ob du diese Änderung genehmigen möchtest:
Lies dieses Pop-up genau durch, um zu verstehen, welche Berechtigungen du erteilst
Um zu überprüfen, ob der Vorgang erfolgreich war, können wir dieses Cmdlet ausführen, um unsere Berechtigungen abzurufen:
(Get-MgContext).scopes
Unsere hinzugefügten Berechtigungen – im gelben Rechteck
Wenn die falschen Berechtigungen vergeben wurden, erhältst du eine Fehlermeldung wie diese:
Die fehlenden Berechtigungen sind in gelben Klammern angegeben
Da wir nun mit der Graph PowerShell verbunden sind, haben wir zusätzliche Optionen, um Cmdlets in der Shell auszuführen:
Beispiele hierfür sind:
Get-MgReportMailboxUsageDetail
Get-MgReportMailboxUsageMailboxCount
Get-MgReportMailboxUsageQuotaStatusMailboxCount
Get-MgReportMailboxUsageStorage
Wenn du einen dieser Befehle ausführst, erhältst du eine Ausgabe mit den richtigen Parametern oder Switchen:
Get-MgReportMailboxUsageStorage -period 'D7' -OutFile c:\data\test.txt
Die Ausgabe für die Postfachnutzung wird in einer Textdatei zur Analyse/Überprüfung gespeichert.
Wie PowerShell-Cmdlets werden diese Cmdlets nach der Verbindung mit Microsoft Graph ausgeführt.
$Results = (Invoke-MGGraphRequest -Method get -Uri 'https://graph.microsoft.com/v1.0/applications/?$select=id,displayName' -OutputType PSObject -Headers @{'ConsistencyLevel' = 'eventual' }).Value
Beachte die URL, die für die Verbindung verwendet wird und die auf die Graph API URI für Anwendungen verweist. Es gibt auch eine "Select"-Aktion, mit der die ID und der Anzeigename der Anwendungen abgerufen werden:
Wenn die Aktion ausgeführt wird, erhalten wir die folgende Ausgabe:
Liste der Anwendungen in einem Tenant mit den Eigenschaften ID und DisplayName als ausgewählte Merkmale
Eine häufige Frage an dieser Stelle ist: Wie finde ich die richtige URL, wenn ich die Invoke-RestMethod noch nicht kenne? Wir können den Microsoft Graph Explorer verwenden, um herauszufinden und zu verstehen, was abgerufen werden kann. Melde dich zuerst bei deinem Tenant an:
Anmelden bei einem Tenant zur Ermittlung der Graph URI Endpunkte
Nach der Anmeldung sehen wir oben die Basis-URL (https://graph.microsoft.com/v1.0/me), die auf das persönliche Konto des angemeldeten Nutzers verweist. Auf der linken Seite sehen wir ein Fenster, in dem wir verschiedene Endpunkte für eine Query/Abfrage auswählen können.
Links, im roten Rechteck, sehen wir einige Beispielabfragen, die wir ausführen können, um die Grundlagen zu erlernen
Wenn wir eine dieser Optionen unter Anwendungen auswählen, können wir auf die Schaltfläche 'Abfrage ausführen' klicken, um die Query auszuführen. Die URL für diese lautet:
Dies ist ähnlich der Abfrage, die wir zuvor ausgeführt haben. Jetzt können wir auch eine Liste der Gruppen im Tenant erhalten, indem wir uns mit dieser URL verbinden:
Diese vier Aktionen beschreiben, was wir tun wollen, wenn wir uns mit den verschiedenen Verbindungspunkten (URLs) verbinden. Hier eine kurze Zusammenfassung:
Wenn du die Graph PowerShell verwendest, ist es gut zu wissen, dass es im Vergleich zu anderen PowerShell-Modulen mögliche Einschränkungen oder generelle Macken/Features gibt. In diesem Abschnitt gehen wir kurz auf diese ein.
Nachdem wir nun die Grundlagen der Graph PowerShell kennengelernt haben, stellt sich die Frage, was wir als nächstes erkunden sollten? In dieser Reihe von Blogartikeln werden wir uns damit beschäftigen, wofür wir Graph in Bezug auf verschiedene Workloads in Microsoft 365 verwenden können. Wir beginnen mit Exchange und gehen dann zu Teams über. Die Artikel werden sich darauf konzentrieren, wie praktisch es ist, Graph PowerShell für die Verwaltung dieser Workloads zu verwenden, welche Aufgaben in Graph ausgeführt werden können und ob das ursprüngliche Modul für eine effiziente Verwaltung noch benötigt wird. Ziel ist es, praktische und nützliche Ratschläge zu geben, welche Methode für beide Workloads verwendet werden sollte. Wir hoffen, dass dies Administratoren hilft, die mit der Abschaffung der Module MSOL und Azure AD zu kämpfen haben. Vielen Dank, dass Sie diesen Artikel gelesen haben.
Du kennst dieses Henne-Ei-Problem: Du möchtest gerne mehr Aufgaben automatisieren um Zeit zu sparen, automatisierst jedoch nicht, weil du keine Zeit hast, mit der Automation zu beginnen.
Die ScriptRunner ActionPacks helfen dir bei der Lösung dieses Dilemmas. Die themen- und produktorientierte PowerShell Skript-Sammlung deckt typische Anwendungsfälle im IT-Betrieb ab. Die Skripte sind nach Microsoft Best Practices geschrieben, werden kontinuierlich ausgebaut und verbessert und sind mit ScriptRunner sofort lauffähig.
Die Verwendung der ActionPacks spart Zeit, da weniger Skripte neu entwickelt werden müssen. Natürlich kannst du die Skripte verändern und an deine spezifischen Bedürfnisse und Anforderungen anpassen. Auf Anhieb startklar!
Hier ist der direkte Link zum Thema Graph:
Und hier die Übersicht über alle ActionPacks. Wir decken alle Bereiche ab, egal ob du Hilfe für Active Directory, Citrix, Exchange oder VMware suchst.
Alle ActionPacks im Überblick!
Sep 14, 2023 by Damian Scoles
Das Microsoft Graph SDK PowerShell-Modul ersetzt zwei andere Module. Erfahre mehr darüber, wie du dich mit Graph...
Mär 6, 2024 by Damian Scoles
Mit der Abkündigung von MS Online und dem Azure AD-Modul ist es an der Zeit, die bisherigen Abläufe durch neue Lösungen...
Okt 16, 2024 by Damian Scoles
Wie unterscheidet sich die Exchange Online-Administration mit dem Microsoft Graph PowerShell-Modul vom herkömmlichen...
Damian Scoles ist ein zehnfacher Microsoft MVP mit Spezialisierung auf Exchange, Office 365 und PowerShell, der über 25 Jahre Erfahrung in der IT-Branche mitbringt. Er ist im Großraum Chicago ansässig und begann mit der Verwaltung von Exchange 5.5 und Windows NT. Im Laufe der Jahre hat er mit Office 365 seit BPOS gearbeitet und darüber hinaus Erfahrung mit Azure AD, Security and Compliance Admin Centers und Exchange Online. Zu seinem Engagement in der Community gehören Beiträge in TechNet-Foren, die Erstellung von PowerShell-Skripten, die in seinen Blogs zu finden sind, das Schreiben von ausführlichen PowerShell/Office365/Exchange-Blogartikeln, Tweets und die Erstellung von PowerShell-Videos auf YouTube. Er hat fünf PowerShell-Bücher geschrieben und arbeitet außerdem aktiv an dem Buch "Microsoft 365 Security for IT Pros".