Erstellen von PowerShell-Skripts mit Microsoft Graph
In diesem Tutorial erfahren Sie, wie Sie ein PowerShell-Skript erstellen, das die Microsoft Graph-API verwendet, um im Auftrag eines Benutzers auf Daten zuzugreifen.
Hinweis
Informationen zur Verwendung von Microsoft Graph für den Zugriff auf Daten mithilfe der reinen App-Authentifizierung finden Sie in diesem Tutorial zur reinen App-Authentifizierung.
In diesem Lernprogramm wird Folgendes vermittelt:
- Abrufen des angemeldeten Benutzers
- Auflisten der Posteingangsnachrichten des Benutzers
- E-Mail senden
Tipp
Alternativ zu diesem Tutorial können Sie den vollständigen Code über das Schnellstarttool herunterladen, das die App-Registrierung und -Konfiguration automatisiert. Der heruntergeladene Code funktioniert ohne Änderungen.
Sie können auch das GitHub-Repository herunterladen oder klonen und die Anweisungen in der INFODATEI befolgen, um eine Anwendung zu registrieren und das Projekt zu konfigurieren.
Voraussetzungen
Bevor Sie mit diesem Tutorial beginnen, sollte PowerShell auf Ihrem Entwicklungscomputer installiert sein. PowerShell 5.1 ist die Mindestanforderung, aber PowerShell 7 wird empfohlen.
Sie sollten auch über ein Microsoft-Geschäfts-, Schul- oder Unikonto mit einem Exchange Online-Postfach verfügen. Wenn Sie nicht über einen Microsoft 365-Mandanten verfügen, können Sie sich über das Microsoft 365-Entwicklerprogramm für einen mandantenfähigen Mandanten qualifizieren. Weitere Informationen finden Sie in den häufig gestellten Fragen. Alternativ können Sie sich für eine kostenlose 1-monatige Testversion registrieren oder einen Microsoft 365-Plan erwerben.
Hinweis
Dieses Tutorial wurde mit PowerShell 7.2.2 und Microsoft Graph PowerShell SDK Version 1.9.5 geschrieben. Die Schritte in diesem Leitfaden funktionieren möglicherweise mit anderen Versionen, die jedoch nicht getestet wurden.
Registrieren der App im Portal
In dieser Übung registrieren Sie eine neue Anwendung in Azure Active Directory, um die Benutzerauthentifizierung zu aktivieren. Sie können eine Anwendung über das Microsoft Entra Admin Center oder mithilfe des Microsoft Graph PowerShell SDK registrieren.
Registrieren der Anwendung für die Benutzerauthentifizierung
In diesem Abschnitt registrieren Sie eine Anwendung, die die Benutzerauthentifizierung mithilfe des Gerätecodeflows unterstützt.
Hinweis
Das Registrieren einer Anwendung für die Benutzerauthentifizierung für das Microsoft Graph PowerShell SDK ist optional. Das SDK verfügt über eine eigene Anwendungsregistrierung und die entsprechende Client-ID. Die Verwendung Ihrer eigenen Anwendungs-ID ermöglicht jedoch eine bessere Kontrolle über Berechtigungsbereiche für ein bestimmtes PowerShell-Skript.
Öffnen Sie einen Browser, navigieren Sie zum Microsoft Entra Admin Center , und melden Sie sich mit einem globalen Administratorkonto an.
Wählen Sie im linken Navigationsbereich Microsoft Entra ID aus, erweitern Sie Identität, erweitern Sie Anwendungen, und wählen Sie dann App-Registrierungen aus.
Wählen Sie Neue Registrierung aus. Geben Sie einen Namen für Ihre Anwendung ein,
Graph User Auth Tutorial
z. B. .Legen Sie unterstützte Kontotypen wie gewünscht fest. Mögliche Optionen:
Option Wer kann sich anmelden? Nur Konten in diesem Organisationsverzeichnis Nur Benutzer in Ihrer Microsoft 365-Organisation Konten in einem beliebigen Organisationsverzeichnis Benutzer in einer beliebigen Microsoft 365-Organisation (Geschäfts-, Schul- oder Unikonten) Konten in einem beliebigen Organisationsverzeichnis ... und persönliche Microsoft-Konten Benutzer in jeder Microsoft 365-Organisation (Geschäfts-, Schul- oder Unikonten) und persönliche Microsoft-Konten Lassen Sie URI umleiten leer.
Wählen Sie Registrieren aus. Kopieren Sie auf der Seite Übersicht der Anwendung den Wert der Anwendungs-ID (Client-ID), und speichern Sie ihn. Sie benötigen ihn im nächsten Schritt. Wenn Sie nur Konten in diesem Organisationsverzeichnis für Unterstützte Kontotypen ausgewählt haben, kopieren Sie auch die Verzeichnis-ID (Mandant), und speichern Sie sie.
Wählen Sie unter Verwalten die Option Authentifizierung aus. Suchen Sie den Abschnitt Erweiterte Einstellungen , und ändern Sie die Umschaltfläche Öffentliche Clientflows zulassen auf Ja, und wählen Sie dann Speichern aus.
Hinweis
Beachten Sie, dass Sie keine Microsoft Graph-Berechtigungen für die App-Registrierung konfiguriert haben. Dies liegt daran, dass im Beispiel die dynamische Zustimmung verwendet wird, um bestimmte Berechtigungen für die Benutzerauthentifizierung anzufordern.
Hinzufügen der Benutzerauthentifizierung
In diesem Abschnitt authentifizieren Sie eine PowerShell-Sitzung als Benutzer für Microsoft Graph. Dies ist erforderlich, um das erforderliche OAuth-Zugriffstoken zum Aufrufen von Microsoft Graph abzurufen.
Das Microsoft Graph PowerShell SDK bietet zwei Authentifizierungsmethoden für die Benutzerauthentifizierung: interaktive Browser- und Gerätecodeauthentifizierung. Die interaktive Browserauthentifizierung verwendet den Standardbrowser eines Geräts, um dem Benutzer die Anmeldung zu ermöglichen. Die Gerätecodeauthentifizierung ermöglicht die Authentifizierung in Umgebungen ohne Standardbrowser. In dieser Übung verwenden Sie die Gerätecodeauthentifizierung.
Wichtig
Wenn Sie das Microsoft Graph PowerShell SDK noch nicht installiert haben, installieren Sie es jetzt , bevor Sie fortfahren.
Den Benutzer authentifizieren
Öffnen Sie PowerShell, und verwenden Sie den folgenden Befehl, um die
$clientID
Sitzungsvariable festzulegen. Ersetzen Sie <dabei your-client-id> durch die Client-ID Ihrer App-Registrierung.$clientId = <your-client-id>
Legen Sie die Sitzungsvariable
$tenantId
fest. Wenn Sie die Option ausgewählt haben, bei der Registrierung Ihrer Anwendung nur Benutzern in Ihrer Organisation die Anmeldung zu gestatten, ersetzen <Sie tenant-id> durch die Mandanten-ID Ihrer Organisation. Ersetzen Sie andernfalls durchcommon
.$tenantId = <tenant-id>
Legen Sie die Sitzungsvariable
$graphScopes
fest.$graphScopes = "user.read mail.read mail.send"
Verwenden Sie den folgenden Befehl, um den Benutzer innerhalb der aktuellen PowerShell-Sitzung zu authentifizieren.
# Authenticate the user Connect-MgGraph -ClientId $clientId -TenantId $tenantId -Scopes $graphScopes -UseDeviceAuthentication
Tipp
Wenn Sie die interaktive Browserauthentifizierung verwenden möchten, lassen Sie den
-UseDeviceAuthentication
Parameter weg.Öffnen Sie einen Browser, und navigieren Sie zu der angezeigten URL. Geben Sie den angegebenen Code ein, und melden Sie sich an.
Wichtig
Achten Sie auf vorhandene Microsoft 365-Konten, die bei Ihrem Browser angemeldet sind, wenn Sie zu
https://microsoft.com/devicelogin
navigieren. Verwenden Sie Browserfeatures wie Profile, Gastmodus oder privaten Modus, um sicherzustellen, dass Sie sich als das Konto authentifizieren, das Sie zu Testzwecken verwenden möchten.Kehren Sie nach Abschluss des Vorgangs zum PowerShell-Fenster zurück. Führen Sie den folgenden Befehl aus, um den authentifizierten Kontext zu überprüfen.
# Get the Graph context Get-MgContext
ClientId : 2fb1652f-a9a0-4db9-b220-b224b8d9d38b TenantId : 601faea3-be45-4960-898f-92b379b17cd9 CertificateThumbprint : Scopes : {Mail.Read, Mail.Send, openid, profile…} AuthType : Delegated AuthProviderType : DeviceCodeProvider CertificateName : Account : MeganB@contoso.com AppName : PowerShell Graph Tutorial ContextScope : CurrentUser Certificate : PSHostVersion : 2022.4.1 ClientTimeout : 00:05:00
Benutzer abrufen
In diesem Abschnitt erhalten Sie den authentifizierten Benutzer.
Führen Sie in Ihrer authentifizierten PowerShell-Sitzung den folgenden Befehl aus, um den aktuellen Kontext abzurufen. Der Kontext stellt Informationen bereit, um den authentifizierten Benutzer zu identifizieren.
$context = Get-MgContext
Führen Sie den folgenden Befehl aus, um den Benutzer aus Microsoft Graph abzurufen.
# Get the authenticated user by UPN $user = Get-MgUser -UserId $context.Account -Select 'displayName, id, mail, userPrincipalName'
Tipp
Sie können den
-Debug
Schalter zum vorherigen Befehl hinzufügen, um die API-Anforderung und -Antwort anzuzeigen.Führen Sie die folgenden Befehle aus, um Benutzerinformationen auszugeben.
Write-Host "Hello," $user.DisplayName # For Work/school accounts, email is in Mail property # Personal accounts, email is in UserPrincipalName Write-Host "Email:", ($user.Mail ?? $user.UserPrincipalName)
Hello, Megan Bowen! Email: MeganB@contoso.com
Code erläutert
Betrachten Sie den Befehl, der zum Abrufen des authentifizierten Benutzers verwendet wird. Es ist ein scheinbar einfacher Befehl, aber es gibt einige wichtige Details zu beachten.
Zugreifen auf "me"
Der Get-MgUser
Befehl erstellt eine Anforderung an die GET USER-API . Auf diese API kann auf zwei Arten zugegriffen werden:
GET /me
GET /users/{user-id}
Der API-Endpunkt wird vom Microsoft Graph PowerShell SDK nicht unterstützt GET /me
. Um den GEt /users/{user-id}
Endpunkt verwenden zu können, müssen wir einen Wert für den {user-id}
Parameter angeben. Im obigen Beispiel wird der $context.Account
-Wert verwendet. Dieser Wert enthält den Benutzerprinzipalnamen (UPN) des authentifizierten Benutzers.
Anfordern bestimmter Eigenschaften
Die Funktion verwendet den -Select
Parameter für den Befehl, um die benötigten Eigenschaften anzugeben. Dadurch wird dem API-Aufruf der Abfrageparameter $select hinzugefügt.
Stark typisierter Rückgabetyp
Die Funktion gibt ein MicrosoftGraphUser
Objekt zurück, das aus der JSON-Antwort der API deserialisiert wurde. Da der Befehl verwendet -Select
, verfügen nur die angeforderten Eigenschaften über Werte im zurückgegebenen Objekt. Alle anderen Eigenschaften verfügen über Standardwerte.
Posteingang auflisten
In diesem Abschnitt listen Sie Nachrichten im E-Mail-Posteingang des Benutzers auf.
Überprüfen Sie in Ihrer authentifizierten PowerShell-Sitzung, ob die
$user
Variable festgelegt ist.PS > $user.DisplayName Megan Bowen
Führen Sie den folgenden Befehl aus, um den Posteingang des Benutzers aufzulisten.
Get-MgUserMailFolderMessage -UserId $user.Id -MailFolderId Inbox -Select ` "from,isRead,receivedDateTime,subject" -OrderBy "receivedDateTime DESC" ` -Top 25 | Format-Table Subject,@{n='From';e={$_.From.EmailAddress.Name}}, ` IsRead,ReceivedDateTime
Überprüfen Sie die Ausgabe.
Subject From IsRead ReceivedDateTime ------- ---- ------ ---------------- Updates from Ask HR and other communities Contoso Demo on Yammer False 4/19/2022 10:19:02 PM Employee Initiative Thoughts Patti Fernandez False 4/19/2022 3:15:56 PM Voice Mail (11 seconds) Alex Wilber False 4/18/2022 2:24:16 PM Our Spring Blog Update Alex Wilber True 4/18/2022 1:52:03 PM Atlanta Flight Reservation Alex Wilber False 4/13/2022 2:30:27 AM Atlanta Trip Itinerary - down time Alex Wilber False 4/12/2022 4:46:01 PM
Code erläutert
Berücksichtigen Sie den Befehl, der zum Auflisten des Posteingangs des Benutzers verwendet wird.
Zugreifen auf bekannte E-Mail-Ordner
Der Get-MgUserMailFolderMessage
Befehl erstellt eine Anforderung an die API zum Auflisten von Nachrichten , insbesondere mithilfe des Endpunkts GET /users/{user-id}/mailFolders/{folder-id}/messages
. Mithilfe dieses Endpunkts gibt die API nur Nachrichten im angeforderten E-Mail-Ordner zurück. Da der Posteingang in diesem Fall ein bekannter Standardordner innerhalb des Postfachs eines Benutzers ist, ist er über seinen bekannten Namen zugänglich: -MailFolderId Inbox
. Auf nicht standardmäßige Ordner wird auf die gleiche Weise zugegriffen, indem der bekannte Name durch die ID-Eigenschaft des E-Mail-Ordners ersetzt wird. Ausführliche Informationen zu den verfügbaren bekannten Ordnernamen finden Sie unter mailFolder-Ressourcentyp.
Zugreifen auf eine Sammlung
Get-MgUser
Im Gegensatz zum Befehl aus dem vorherigen Abschnitt, der ein einzelnes Objekt zurückgibt, gibt diese Methode eine Auflistung von Nachrichten zurück. Die meisten APIs in Microsoft Graph, die eine Sammlung zurückgeben, geben nicht alle verfügbaren Ergebnisse in einer einzigen Antwort zurück. Stattdessen wird paging verwendet, um einen Teil der Ergebnisse zurückzugeben, während clients eine Methode zum Anfordern der nächsten "Seite" bereitstellen.
Standardseitengrößen
APIs, die Paging verwenden, implementieren eine Standardseitengröße. Für Nachrichten ist der Standardwert 10. Clients können mithilfe des abfrageparameters $top mehr (oder weniger) anfordern. Im Microsoft Graph PowerShell SDK wird dies mit dem -Top 25
Parameter erreicht.
Hinweis
Der über -Top
übergebene Wert ist eine obere Grenze, keine explizite Zahl. Die API gibt eine Anzahl von Nachrichten bis zum angegebenen Wert zurück.
Sortieren von Sammlungen
Die Funktion verwendet den -OrderBy
-Parameter für die Anforderung, um Ergebnisse anzufordern, die nach dem Zeitpunkt des Nachrichteneingangs sortiert sind (receivedDateTime
-Eigenschaft). Es enthält das DESC
Schlüsselwort, sodass kürzlich empfangene Nachrichten zuerst aufgeführt werden. Dadurch wird dem API-Aufruf der abfrageparameter $orderby hinzugefügt.
Nachrichten senden
In diesem Abschnitt senden Sie eine E-Mail-Nachricht als authentifizierten Benutzer.
Überprüfen Sie in Ihrer authentifizierten PowerShell-Sitzung, ob die
$user
Variable festgelegt ist.PS > $user.DisplayName Megan Bowen
Verwenden Sie den folgenden Befehl, um ein Objekt zu definieren, das den Anforderungstext für die E-Mail-API zum Senden darstellt.
$sendMailParams = @{ Message = @{ Subject = "Testing Microsoft Graph" Body = @{ ContentType = "text" Content = "Hello world!" } ToRecipients = @( @{ EmailAddress = @{ Address = ($user.Mail ?? $user.UserPrincipalName) } } ) } }
Verwenden Sie den folgenden Befehl, um die Nachricht zu senden.
Send-MgUserMail -UserId $user.Id -BodyParameter $sendMailParams
Hinweis
Wenn Sie mit einem Entwicklermandanten aus dem Microsoft 365-Entwicklerprogramm testen, wird die von Ihnen gesendete E-Mail möglicherweise nicht zugestellt, und Sie erhalten möglicherweise einen Nichtzustellbarkeitsbericht. Wenden Sie sich in diesem Fall über das Microsoft 365 Admin Center an den Support.
Wiederholen Sie den Befehl aus dem vorherigen Schritt, um zu überprüfen,
Get-MgUserMailFolderMessage
ob die Nachricht empfangen wurde.
Code erläutert
Betrachten Sie die Befehle, die zum Senden einer Nachricht verwendet werden.
Senden von E-Mails
Der Send-MgUserMail
Befehl erstellt eine Anforderung an die API zum Senden von E-Mails .
Erstellen von Objekten
Im Gegensatz zu den vorherigen Aufrufen von Microsoft Graph, die nur Daten lesen, werden mit diesem Aufruf Daten erstellt. Um dies mit dem SDK zu tun, erstellen Sie ein Objekt, das den Anforderungstext darstellt, legen die gewünschten Eigenschaften fest und übergeben es dann im BodyParameter
-Parameter.
Optional: Fügen Sie Ihren eigenen Code hinzu.
In diesem Abschnitt verwenden Sie Ihre eigenen Microsoft Graph PowerShell SDK-Befehle. Dies kann ein Codeausschnitt aus der Microsoft Graph-Dokumentation oder graph-Explorer oder code sein, den Sie erstellt haben. Dieser Abschnitt ist optional.
Auswählen einer API
Suchen Sie eine API in Microsoft Graph, die Sie ausprobieren möchten. Beispiel: Die Api zum Erstellen eines Ereignisses . Sie können eines der Beispiele in der API-Dokumentation verwenden, eine API-Anforderung im Graph-Explorer anpassen und den generierten Codeausschnitt verwenden oder den Find-MgGraphCommand
Befehl verwenden, um den entsprechenden Befehl zu suchen.
Einer der API-Endpunkte zum Erstellen eines Ereignisses ist POST /users/{id | userPrincipalName}/events
beispielsweise . Sie können dies verwenden, um den entsprechenden PowerShell-Befehl zu suchen.
PS > Find-MgGraphCommand -Uri "/users/{id | userPrincipalName}/events" -Method "POST"
APIVersion: v1.0
Command Module Method URI OutputType Permissions Variants
------- ------ ------ --- ---------- ----------- --------
New-MgUserEvent Calendar POST /users/{user-id}/events IMicrosoftGraphEvent {Calendars.ReadWrite} {Create1, CreateExp…
APIVersion: beta
Command Module Method URI OutputType Permissions Variants
------- ------ ------ --- ---------- ----------- --------
New-MgUserEvent Calendar POST /users/{user-id}/events IMicrosoftGraphEvent1 {Calendars.ReadWrite} {Create, CreateExp…
Die Ausgabe gibt an, dass der New-MgUserEvent
Befehl der entsprechende Befehl ist.
Konfigurieren von Berechtigungen
Überprüfen Sie den Abschnitt Berechtigungen der Referenzdokumentation für Die ausgewählte API, um zu sehen, welche Authentifizierungsmethoden unterstützt werden. Einige APIs unterstützen beispielsweise keine (delegierte) Benutzerauthentifizierung oder persönliche Microsoft-Konten.
Trennen Sie die aktuelle Sitzung (Disconnect-MgGraph
), und stellen Sie die Verbindung mit der erforderlichen Berechtigung im -Scopes
Parameter wieder her.
Tipp
Die Verwendung des -ForceRefresh
Parameters mit dem Connect-MgGraph
Befehl stellt sicher, dass neu konfigurierte Berechtigungen angewendet werden.
Ausführen des Befehls
Nachdem Sie nun mit den erforderlichen Berechtigungen verbunden sind, führen Sie den ausgewählten Befehl aus.
Herzlichen Glückwunsch!
Sie haben das PowerShell-Tutorial für Microsoft Graph abgeschlossen. Nachdem Sie nun über eine funktionierende App verfügen, die Microsoft Graph aufruft, können Sie experimentieren und neue Features hinzufügen.
- Erfahren Sie, wie Sie die reine App-Authentifizierung mit dem Microsoft Graph PowerShell SDK verwenden.
- Besuchen Sie die Übersicht über Microsoft Graph , um alle Daten anzuzeigen, auf die Sie mit Microsoft Graph zugreifen können.
Liegt ein Problem mit diesem Abschnitt vor? Wenn ja, senden Sie uns Feedback, damit wir den Abschnitt verbessern können.