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
Wie unterscheidet sich die Exchange Online-Administration mit dem Microsoft Graph PowerShell-Modul vom herkömmlichen Exchange Online-Management? Hier erhältst du praktische Einblicke und Beispiele für die Verwendung von Graph PowerShell für Postfacheinstellungen und die aktuell bestehenden Einschränkungen der Administrationsfunktionen.
Exchange und PowerShell gehören zusammen, und die überwiegende Mehrheit der Administratoren von Exchange Online verwendet das PowerShell-Modul Exchange Online Management. Microsofts Graph PowerShell-Modul bietet ebenfalls Zugriff auf Exchange Online, wie die Cmdlets in den Sub-Modulen zeigen, jedoch keine vollständigen Abdeckung aller Funktionen. Warum sollte man es also verwenden?
Das Microsoft Graph PowerShell Modul bietet derzeit 38 verschiedene Untermodule und tausende Cmdlets. Im Hinblick auf die Exchange-Verwaltung gibt es kein einziges Modul, das alle Cmdlets für Exchange in Graph enthält. Ein Untermodul sticht heraus: das Microsoft.Graph.Mail Modul, das zum Zeitpunkt des Verfassens dieses Artikels 75 Cmdlets enthält. Zum Vergleich: Das Exchange Online-PowerShell-Modul enthält zum Zeitpunkt der Erstellung dieses Artikels über 800 Cmdlets. Welche anderen Untermodule können bei der Verwaltung von Exchange nützlich sein?
Microsoft.Graph.Compliance
Microsoft.Graph.Security
Microsoft.Graph.Reports
Microsoft.Graph.Contacts
Diese vier Untermodule enthalten nützliche Cmdlets für die Arbeit mit Exchange Online. Administratoren finden hier nützliche Cmdlets für Aufgaben, die sich auf die Postfächer der Nutzer und nicht auf die Makroebene der Konfiguration von Exchange Online konzentrieren. Werfen wir einen Blick darauf, wofür Exchange Online PowerShell verwendet werden kann, und schauen wir uns einmal an, welche praktischen Aufgaben wir mit diesen Modulen ausführen können.
Exchange ist ein komplexes Produkt mit vielen administrationsrelevanten Funktionen. Nachfolgend ein Beispiel, was wir mit dem Exchange Online PowerShell Modul (v3) verwalten können:
Nachfolgend eine kurze Liste der Möglichkeiten von Graph. Sie ist stark vereinfacht, da es viele Cmdlets gibt, die wir in Graph für Exchange Online verwenden können, allerdings beschränken sich diese auf Optionen auf Nutzer-/Postfachebene.
Hinweis: Die oben aufgeführten Cmdlets sind sehr nutzerorientiert und bieten nur wenige oder gar keine administrative Optionen für Exchange Online.
Wie bei jeder Aufgabe in Graph können wir nicht davon ausgehen, dass Cmdlets, die sich auf Exchange beziehen, nur im Untermodul Microsoft.Graph.Mail vorhanden sind. Daher führen wir eine allgemeinere Abfrage durch, um zu sehen, welche Cmdlets mit dem Substantiv -email außerhalb des Mail-Submoduls existieren:
Get-Command *email*
Wie wir oben sehen können, gibt es Cmdlets mit dem Substantiv -email in den Graph-Untermodulen Reports, Identity und Teams
Der Wunsch der Administratoren, Graph PowerShell anstelle von Exchange zu verwenden, scheint bei Microsoft wenig Wirkung gezeigt zu haben, da die verfügbaren Funktionen nicht vollständig sind. Die Exchange Online-Verwaltung hat viele Facetten, die durch das Exchange Online PowerShell-Modul ausreichend abgedeckt werden, aber ein großer Teil der Backend-Verwaltung fehlt in Graph. Das bedeutet nicht, dass Graph für die Administration von Exchange ungeeignet ist, aber wir müssen uns über die Grenzen von Graph im Klaren sein. In diesem Abschnitt des Artikels werden wir uns mit einigen hervorragenden Einsatzmöglichkeiten von Graph PowerShell für Exchange Workloads beschäftigen.
Die meisten Cmdlets konzentrieren sich auf Nutzer und ihre Postfächer und können sehr nützlich sein, um Probleme mit Postfächern abzufragen und zu beheben.
PowerShell kann verwendet werden, um Teile von Postfächern zu untersuchen, einschließlich Ordner. In Ordnern werden Dateien abgelegt und E-Mails für den geschäftlichen oder privaten Gebrauch organisiert. In diesen Ordnern können wir Dinge wie die Größe und Anzahl der gesamten und ungelesenen E-Mails abfragen. Warum sollte uns das interessieren? Outlook hat Grenzen, die sichtbar werden, wenn die Ordner zu groß werden. Die folgende Abfrage kann dies aufdecken, um Probleme bei der Outlook-Synchronisation zu beheben:
Get-MgUserMailFolder -UserId 22561a78-a72e-4d39-898d-cd7c57c84ca6 |
Format-Table DisplayName,*ItemCount,AdditionalProperties
Ordner-Screenshot
Im obigen Screenshot sehen wir, dass einige Ordner tausende von Einträgen haben, aber die Anzahl nicht die Grenzen von Outlook überschreitet.
Das obige Beispiel ist eine einfache Abfrage, aber was wäre, wenn wir alle Postfächer überprüfen wollten, um festzustellen, ob die Gesamtzahl der Elemente einen bestimmten Schwellenwert (z.B. 10.000) überschreitet, da dies die Leistung von Outlook beeinträchtigen könnte? Wie gehen wir vor?
foreach ($Mailbox in $Mailboxes) {
try {
$Folders = Get-MgUserMailFolder -UserId $Mailbox.Id -ErrorAction Stop |
Select-Object DisplayName, TotalItemCount
}
catch
{}
foreach ($Folder in $Folders) {
if ($Folder.TotalItemCount -gt 10000) {
$FolderName = $Folder.DisplayName
$MailboxName = $Mailbox.DisplayName
Write-Host "$MailboxName - $FolderName has over 10k mail items."
}
}
}
oder Write-Host wie folgt:
foreach ($Folder in $Folders) {
if ($Folder.TotalItemCount -gt 10000) {
$FolderName = $Folder.DisplayName
$MailboxName = $Mailbox.DisplayName
Write-Host "$($Folder.DisplayName) - $($Mailbox.DisplayName) has over 10k mail items."
}
Zu erwartende Ergebnisse dieses Codes, wenn Postfächer mehr als 10.000 Elemente in einem Ordner haben:
10.000 Elemente überschritten
Es wurden vier Postfächer gefunden, die mehr als 10.000 Elemente im Posteingangsordner gespeichert haben. Wir können die Nutzer proaktiv auffordern, dies zu bereinigen, um zukünftige Probleme zu vermeiden.
Achtung: Wenn wir delegierte Berechtigungen verwenden, können wir nur Informationen über den lokalen Nutzer abrufen und müssen uns stattdessen über eine Anwendung mit Graph verbinden.
$Thumbprint = '77643669B10C64A23B35DA761FEEF4222039F439'
$AppId = 'dad165ff-4Fa8-4d0f-bbf9-5F67876be441'
$TenantId = '5d0DD54e-0082-4eb8-a311-ce17a036f3f4'
Connect-MgGraph -CertificateThumbprint $Thumbprint -ClientId $AppId -TenantId $TenantId
Hier gibt es verschiedene Szenarien: Wenn z.B. eine E-Mail unbeabsichtigt versendet wurde, können wir diese Nachrichten suchen und entfernen. Oder wir haben versehentlich die Microsoft Quarantäne-Benachrichtigung aktiviert, ohne die Nutzer zu informieren, und müssen diese E-Mails entfernen. Beide Szenarien können mit Graph PowerShell durchgeführt werden.
Stelle sicher, dass du dich wieder mit der Azure App to Graph verbindest, da wir so auf alle Postfächer zugreifen können. Zuerst ein Beispiellauf:
$UserID = '5fc8abf1-2178-4043-b601-4802e0a703cd'
Get-MgUserMessage -UserId $UserID -Filter "Subject eq 'Emails Quarantined for your mailbox.'"
Eine Liste der ersten in Quarantäne verschobenen E-Mails im Ausgangspostfach
Einmalig, um die oberste Nachricht zu entfernen:
(Test ob die erwarteten Ergebnisse angezeigt werden)
Remove-MgUserMessage -UserId $UserID -MessageId
'AAMkADNhNWI1ODRiLTVmNjQtNGU4Mi1hYmRlLWFjMzJkYTY2Nzk2NQBGAAAAAABoWADN1g6YRpgk4ssxd16qBwCAEw_FeYpCSKoYCRXHiLVBAS0F7CqPAABpkGQwsqIcSYSWFGyKXc7bAAI4DSpIAAA='
Damit wird tatsächlich eine E-Mail-Nachricht entfernt. Als Nächstes wollen wir alle Nachrichten für einen Nutzer entfernen:
$msgFilter = "Subject eq 'Emails Quarantined for your mailbox.'"
$EmailToRemove = (Get-MgUserMessage -UserId $UserID -Filter $msgFilter).Id
foreach ($Email in $EmailToRemove) {
Remove-MgUserMessage -UserId $UserID -MessageId $Email -WhatIf
}
Mit -WhatIf wird überprüft, ob das Cmdlet korrekt ist:
Der -WhatIf Switch meldet die E-Mails, die aus dem Postfach entfernt werden sollen
Entferne den -WhatIf Switch:
foreach ($Email in $EmailToRemove) {
Remove-MgUserMessage -UserId $UserID -MessageId $Email
}
Dann stellen wir fest, dass es noch mehr E-Mails gibt, die dieses Kriterium erfüllen. Warum ist das so? Graph und Paging. Wenn wir das Cmdlet ausführen, erhalten wir nur die 10 besten Ergebnisse. Wenn wir alle erhalten möchten, müssen wir Graph das mit dem Switch -All mitteilen.
$EmailToRemove = Get-MgUserMessage -UserId $UserID -Filter "Subject eq 'Emails Quarantined for your mailbox.'" -All
Jetzt bekommen wir alle:
Erster Durchlauf – Ergebnis 248 E-Mails
Anhand der Eigenschaft .Count sehen wir, dass weitere 248 E-Mails entfernt werden müssen. Dies liegt daran, dass Get‑MgUserMessage standardmäßig nicht alle Ergebnisse zurückgibt.
Es wird empfohlen, -WhatIf erneut auszuführen und dann die eigentliche Suche zu starten. Kontrolliere am Ende, ob noch Nachrichten vorhanden sind; es sollten keine mehr sein, das Ergebnis ist null:
Zweiter Durchlauf – Null
Nach erneutem Ausführen des Codes wurden alle E-Mails gelöscht und sind nicht mehr auffindbar.
Es gibt ein zusätzliches Cmdlet, das die Anzahl der E-Mails in den Ordnern eines Nutzers abfragt, WENN wir die Ordner-ID haben.
Get-MgUserMailFolder -UserId $UserId |
Select-Object DisplayName,ID |
ForEach-Object {
Write-Host "$($_.DisplayName) - " -NoNewLine
Get-MgUserMailFolderMessageCount -UserId $UserId -MailFolderId $_.Id
}
Gesamtzahlen der Ordner
Get-MgUserMailFolderMessageCount kann auch verwendet werden, um die Gesamtzahl der Ordner zu ermitteln.
Nutzerfotos waren eine Zeit lang eine Funktion von Exchange Online PowerShell, da Exchange der Workload war, mit dem Unternehmen auf Microsoft 365 umgestiegen sind. Jetzt, da Exchange nicht mehr im Mittelpunkt des Microsoft 365-Ökosystems steht, hat Microsoft diese Funktionalität entfernt und stattdessen eine Lösung in Graph PowerShell eingeführt. Innerhalb von Graph gibt es vier Cmdlets, die auf Benutzerfotos ausgerichtet sind:
Get-MgUserPhoto
Get-MgUserPhotoContent
Remove-MgUserPhoto
Set-MgUserPhotoContent
To add a photo to an existing user, we can run code like this:
Set-MgUserPhotoContent -UserId Eric@powershellgeek.com -InFile C:\Data\SampleUserPhoto.jpg
Um zu beweisen, dass es funktioniert, können wir überprüfen, ob Eric tatsächlich ein Foto hat:
Get-MgUserPhoto -UserId Eric@powershellgeek.com
Höhe und Breite des Nutzerfotos
Jetzt haben wir die Größe des Profilfotos des Nutzers: 91x100 Pixel. Und wir können das Foto ganz einfach herunterladen:
Get-MgUserPhotoContent -UserId Eric@powershellgeek.com -OutFile c:\data\SamplePhoto-Eric.jpg
Exportiertes und importiertes Bild
Oben sind die beiden Fotos zu sehen, links das exportierte und rechts das importierte (Ansicht aus dem Verzeichnis "C:\Data").
Die Anwendung ist sehr einfach und kann auch in großen Mengen durchgeführt werden. Um herauszufinden, wer ein Foto hat und wer nicht, führen wir diesen Befehl aus:
Get-MgUser -All |
Select-Object DisplayName, Id |
ForEach-Object {
try {
$Photo = Get-MgUserPhoto -UserId $_.Id -ErrorAction Stop
Write-Host "$($_.DisplayName) has a photo." -ForegroundColor Green
}
catch {
Write-Host "$($_.DisplayName) is missing photo." -ForegroundColor Yellow
}
}
Das Ergebnis sieht folgendermaßen aus:
Wer nutzt (wie Eric auch) ein Foto?
Einige Nutzer haben ein Foto, andere nicht. Jetzt können wir mit Graph PowerShell Fotos zu Nutzern hinzufügen.
Hier ist es einfacher, ein konsolidiertes Modul für die Verwaltung eines Workloads zu verwenden, und damit meine ich Exchange Online Management. Graph ist ein Modell, das auf dem Zugriff auf API-URLs basiert, und Graph-PowerShell-Cmdlets sind Wrapper für diese API-Aufrufe. Das Problem ist, dass die Cmdlets, nach denen du suchst, um einen Workload zu verwalten, über eine ganze Reihe anderer Module verteilt sind. Probiere diese Suche aus und du wirst sehen, dass viele verschiedene Module referenziert werden:
Get-Command '*user*mail*' | Format-Table Name, Source
Diese Untermodule sind die eindeutigen Werte, die wir bei dieser Suche finden:
Mailbezogene Cmdlets
Wir sehen, dass es tatsächlich eine ganze Reihe von Funktionen gibt, die PowerShell-Cmdlets für Mail enthalten. Für diejenigen, für die die Verwaltung einiger Aspekte von Exchange über Graph neu ist, wird es eine Lernkurve geben. Betrachte dies nicht als Hindernis, sondern als eine Reise durch die vielen Möglichkeiten, die Graph bietet. Tatsächlich sind einige der Cmdlets in Graph für Exchange sehr nützlich und erleichtern die Arbeit mit einigen Verwaltungsaufgaben. Die Erkundung verschiedener Aspekte des Postfachs eines Benutzers bedeutet, dass wir Graph PowerShell anstelle von EWS verwenden können, was gut ist, da Microsoft vor kurzem die Abschaffung von EWS angekündigt hat.
Microsoft Graph ist wie eine Schnitzeljagd. Cmdlets, die für einen Workload relevant sind, können aufgrund der Organisation von Graph in verschiedenen Untermodulen gespeichert sein. Wenn man dann noch die Berechtigungsebenen, Delegated vs. Application Permissions und PowerShell Cmdlets vs. Invoke0-RestMethod hinzunimmt, könnte ein Administrator das Gefühl bekommen, dass das gesamte Graph PowerShell SDK umständlich ist. Für die Funktionen, die es bietet, ist es jedoch eine gute Alternative, und in Bezug auf Exchange Online bietet Graph dringend benötigte Einblicke in die Postfächer der Nutzer, die mit der Exchange Online PowerShell möglicherweise nicht möglich sind. Was die allgemeine Eignung für die Verwaltung von Exchange Online betrifft, ist Graph einfach noch nicht so weit, und Administratoren müssen sich weiterhin auf die Exchange Online PowerShell-Module und die Security and Compliance PowerShell-Module zusammen mit Graph verlassen, um diese Arbeitslast effektiv zu bewältigen. Es ist wahrscheinlich, dass Microsoft in der Zukunft einen Punkt erreichen wird, an dem dies nicht mehr der Fall sein wird. Heute ist das jedoch noch nicht der Fall.
Rate mal, wer unser Mitarbeiter des Monats ist (und des des letzten Monats und des nächsten)?
Eric, unser Labrador! Er übernimmt manchmal das Büro
und mit Hilfe von ScriptRunner hat er alles automatisiert – vom Versenden
"wichtiger" E-Mails bis hin zur perfekten Eintakung aller Administrations-Tasks.
Er hat sogar Zeit für ein Nickerchen unter dem Schreibtisch gefunden.
✨🐾 Spoiler: Er ist ein Profi in Sachen Automatisierung und Entspannung! 🐾✨
Und wenn du ernsthaftere Hilfe suchst, empfehlen wir dir unsere Cheat Sheets:
Vereinfache dein Microsoft Exchange Management mit unserem 5-seitigen PowerShell Cheat Sheet für Microsoft Exchange. Dieser unverzichtbare Leitfaden fasst wichtige PowerShell-Befehle und bewährte Methoden zusammen, um wiederkehrende Aufgaben zu automatisieren, Benutzer zu verwalten und Einstellungen mühelos zu konfigurieren. Egal, ob du neu bei Exchange bist oder ein erfahrener Administrator – das Cheat Sheet ist darauf ausgelegt, deine Arbeit einfacher und effizienter zu gestalten.
Hier liegt dein Exchange Cheat Sheet!
Entfalte das volle Potential von PowerShell mit unserem praktischen Poster. Egal ob Anfänger oder erfahrener Profi, dieses Cheat Sheet ist darauf ausgelegt, dein Anlaufpunkt für die wichtigsten und am häufigsten verwendeten cmdlets zu sein.
Das Poster gibt es zum Download und in Papierform.
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".