Exchange Online PowerShell V2
Für Exchange Online entwickelt Microsoft eine neue PowerShell, die aber nicht mehr gegen einen lokalen Server genutzt wird. Erstmals orientiert sich Microsoft an den eigenen Vorgaben und addiert ein Prefix. Die bisherige Exchange PowerShell wird natürlich weiter wie seit Exchange 2007 gegen lokale Exchange Server genutzt.
Wichtig: Ab Sommer 2023 wird die alte
Exchange PowerShell nicht mehr funktionieren. Siehe dazu
Exchange
PowerShell V3
Announcing Deprecation of Remote PowerShell (RPS) Protocol
in Exchange Online PowerShell
https://techcommunity.microsoft.com/t5/exchange-team-blog/announcing-deprecation-of-remote-powershell-rps-protocol-in/ba-p/3695597
Hinweis: Wichtiger Blog-Artikel zu den 4!
verschiedenen Exchange Online PowerShells
Understanding the Different Versions of Exchange Online
PowerShell Modules and Basic Auth
https://techcommunity.microsoft.com/t5/exchange-team-blog/understanding-the-different-versions-of-exchange-online/ba-p/3394487
Im Mai 2023 hat der HCW Probleme, da
Microsoft die alte Exchange RPS-Powershell per Default schon abgeschaltet hat. Bitte temporär wieder aktivieren, wenn es noch kein HCW Update gibt
Siehe auch
https://itpro-tips.com/office-365-hybrid-configuration-issues-with-new-tenants-and-deprecated-remote-powershell-rps/
Für eine Nutzung per Automatisierung ist die Seite EXO PowerShell Automation hilfreich.
- Basic Authentication Deprecation in
Exchange Online – Time’s Up
https://techcommunity.microsoft.com/t5/exchange-team-blog/basic-authentication-deprecation-in-exchange-online-time-s-up/ba-p/3695312 - Exchange Online to Stop Support for
Remote PowerShell Connections in June 2023
https://office365itpros.com/2022/12/19/remote-powershell-deprecation/ - Exchange Online PowerShell v2 Module
Preview – Now More Secure
https://techcommunity.microsoft.com/t5/exchange-team-blog/exchange-online-powershell-v2-module-preview-now-more-secure/ba-p/2922946
Installation
Hinweis: Die neue Exchange PowerShell funktioniert noch nicht mit der PowerShell Core oder PowerShell 7
Schon die Installation unterscheidet sich von bisherigen PowerShell-Erweiterungen. Kein manueller Download von einer Microsoft Downloadseite, sondern sie müssen zuerst das Modul "PowerShellGet" installieren, wenn es nicht schon eh auf dem System installiert ist.
Install-Module PowershellGet
- PowerShellGet
https://docs.microsoft.com/de-de/powershell/module/powershellget/ - Installieren von PowerShellGet
https://docs.microsoft.com/de-de/powershell/scripting/gallery/installing-psget
Im zweiten Schritt installieren Sie dann das ExchangeOnlineManagement-Modul
Install-Module -Name ExchangeOnlineManagement
Optional können Sie auch die Preview installieren:
Install-Module ` -Name ExchangeOnlineManagement ` -RequiredVersion 2.0.6-Preview6 ` -AllowPrerelease
Danach habe ich mir angewöhnt die PowerShell zu schließen und neu zu öffnen, damit die neuen Module auch mit eingebunden werden
- Exchange Online PowerShell v2 Module
Preview – Now More Secure
https://techcommunity.microsoft.com/t5/exchange-team-blog/exchange-online-powershell-v2-module-preview-now-more-secure/ba-p/2922946
Start und neue Befehle
Die starten dann einfach eine ganz normale PowerShell und geben ein:
Connect-ExchangeOnline
Das ist natürlich alles einfacher als die bisherige Online PowerShell mit PSSession, der Office 365 URL und Import-PSSession
Im Juni 2020 habe ich folgende Information gesehen und es hat sich dann das bekannte Anmeldefenster von Office 365 geöffnet, welches auch MFA unterstützt:
Hier noch einmal die Gegenüberstellung als Text:
|--------------------------------------------------------------------------| | Old Cmdlets | New/Reliable/Faster Cmdlets | |--------------------------------------------------------------------------| | Get-CASMailbox | Get-EXOCASMailbox | | Get-Mailbox | Get-EXOMailbox | | Get-MailboxFolderPermission | Get-EXOMailboxFolderPermission | | Get-MailboxFolderStatistics | Get-EXOMailboxFolderStatistics | | Get-MailboxPermission | Get-EXOMailboxPermission | | Get-MailboxStatistics | Get-EXOMailboxStatistics | | Get-MobileDeviceStatistics | Get-EXOMobileDeviceStatistics | | Get-Recipient | Get-EXORecipient | | Get-RecipientPermission | Get-EXORecipientPermission | |--------------------------------------------------------------------------|
Kompatibilität ist Trumpf und daher richtet die neue Exchange Online PowerShell V2 auch noch die alten Befehle ein, die in der Liste hier nicht sehen.
- Verwenden der Exchange Online PowerShell mit moderner
Authentifizierung mithilfe des v2-Moduls
https://docs.microsoft.com/de-de/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps
Automatisierte Nutzung
Interessant an der neuen PowerShell ist aber auch, dass eine Anmeldung nicht mehr nur mit Benutzername/Kennwort erfolgen kann. Dieser Zugang ist speziell für Automatisierungen nicht sicher. Schließlich müssten Sie die Zugangsdaten ja einem Skript überlassen. Weiterhin müssten Sie dann auch noch Ausnahmen bei MFA eintragen, damit eine Anmeldung per Benutzername/Kennwort möglich ist. Das ist gerade für sensible und privilegierte Konten unerwünscht.
Sie können aber ihrem Skript z.B. ein Zertifikat hinterlegen, mit dem es sich gegen Office 365 authentifizieren kann. Der Vorteil ist, dass Sie kein Kennwort benötigen und dieses damit nicht abgefischt werden kann und MFA quasi auch mit erledigt ist, denn wenn das Zertifikat "nicht exportierbar" auf dem Computer mit dem Skript verbunden ist.
- Nur-App-Authentifizierung für
unbeaufsichtigte Skripts im Exo V2-Modu
https://docs.microsoft.com/de-de/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps - Modern Auth and Unattended Scripts in
Exchange Online PowerShell V2
https://techcommunity.microsoft.com/t5/exchange-team-blog/modern-auth-and-unattended-scripts-in-exchange-online-powershell/ba-p/1497387
Throttling
Auch wenn Sie sich als Administrator mit Exchange Online verbunden haben, ist das noch kein Freibrief für "unlimited" PowerShell-Aktionen. Es gibt, wie auch für Anwender, ein Throttling und wenn Sie zu schnell und zu viele Commandlets absetzen, dann bekommen Sie folgende Fehlermeldung.
„Your Request is too frequent…“
Vielleicht haben Sie einen Tenant mit 100.000 Postfächern und wollen bei allen einen Eintrag ändern. Aber meist liegt an einer schlechten Programmierung, warum Exchange Online die Anzahl der Anfragen von ihrem Client drosselt. Es gibt einig Limit, die Sie mit passender Programmierung umgehen können. Eine Anhebung der Limit soll nicht möglich sein.
Throttling Wert | Einstellung | Description |
---|---|---|
PowerShellMaxConcurrency |
3 |
Ein Anwender kann nicht mehr als 3 Sessions parallel offen haben. Das bedeutet, dass Sie eine Session am Ende auch sauber abbauen sollten . |
PowerShellMaxTenantConcurrency |
9 |
Für den Tenant gibt es eine globale Einstellung. |
PowerShellMaxCmdletsTimePeriod |
5 Sek |
The time period, in seconds, that a user can run the number of cmdlets defined by the PowerShellMaxCmdlets or ExchangeMaxCmdlets parameter |
PowerShellMaxCmdlets |
200 |
The number of cmdlets that can be run per PowerShellMaxCmdletsTimePeriod without being throttled |
ExchangeMaxCmdlets |
25 |
This parameter is similar to PowerShellMaxCmdlets but only for Exchange Online cmdlets |
PowerShellMaxDestructiveCmdletsTimePeriod |
60 Sek |
The time period, in seconds, that a user can run the number of cmdlets defined by the PowerShellMaxDestructiveCmdlets parameter |
PowerShellMaxCmdletQueueDepth |
50 |
Defines the number of operations that a user can run simultaneously |
PowerShellMaxDestructiveCmdlets |
120 |
The number of cmdlets that can be run per PowerShellMaxDestructiveCmdletsTimePeriod without being throttled. A desuctive cmdlet is one that makes changes to the Office 365 environment (Such as Set or New cmdlets) |
On-Premises können de die Werte sogar anpassen. Die Commandlets stehen aber nicht in Exchange Online zur Verfügung.
# In Exchange On-Premises können Sie dies ändern New-ThrottlingPolicy ` -Name "PSLimit" ` -PowerShellMaxCmdlets 10 ` -PowerShellMaxCmdletsTimePeriod 5
- Exchange Online PowerShell Throttling in Office 365
https://www.quadrotech-it.com/blog/office-365-exchange-online-powershell-throttling/
Hintergründe
Ich wollte natürlich wissen, was die neue Exchange Online PowerShell V2 im Hintergrund macht. Natürlich ist alles per HTTPS verschlüsselt, so dass Wireshark nicht weiter hilft. Aber Fiddler hilft mit zumindest einen Teil der Daten zu ermitteln. Insbesondere die Anmeldung per OAUTH verrät über das ausgestellte Token schon etwas über die angeforderten Rechte.
Wenn ich das "access_token" z.B. über jwt.io decodiere, dann sieht das JSON-Format wie folgt aus:
{ "aud": "https://outlook.office365.com", "iss": "https://sts.windows.net/3c6855ff-e39f-4d09-a473-33807598ce4b/", "iat": xxx, "nbf": xxx, "exp": xxx, "acct": 0, "acr": "1", "aio": "xxx/xxxx=", "amr": [ "pwd" ], "app_displayname": "Microsoft Exchange REST API Based Powershell", "appid": "fb78d390-0c51-40cd-8e17-fdbfab77341b", "appidacr": "0", "enfpolids": [], "family_name": "Admin", "given_name": "o365", "ipaddr": "146.251.41.17", "name": "admin", "oid": "30447744-bee4-474b-816e-eeb6bcb414d1", "puid": "1003BFFD99BE045D", "scp": "AdminApi.AccessAsUser.All FfoPowerShell.AccessAsUser.All RemotePowerShell.AccessAsUser.All", "sid": "87da8436-5072-4365-9066-c0e127e9734f", "sub": "xxx-xxx", "tid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "unique_name": "admin2@msxfaq.onmicrosoft.com", "upn": "admin2@msxfaq.onmicrosoft.com", "uti": "xxxx", "ver": "1.0", "wids": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"] }
Hier sind die folgenden Daten interessant.
- "aud": "https://outlook.office365.com"
Die Exchange Online PowerShell V2 nutzt also nicht Graph als API sondern weiterhin "outlook.office365.com" als Adresse. Aber es natürlich eine RestAPI - "scp": "AdminApi.AccessAsUser.All
FfoPowerShell.AccessAsUser.All
RemotePowerShell.AccessAsUser.All",
Das sind die "Admin-Rollen" die mein Benutzer in dem Moment hat.
Aber da es sich um eine REST-API handelt, können Sie mit Fiddler natürlich auch jeden einzelnen Aufruf anschauen. Allerdings nutzt die PowerShell nicht die Einstellungen ihres Browsers und nutzt damit auch erst einmal nicht den Fiddler-HTTP-Proxy. Man muss schon den WinHTTP-Proxy umbiegen
netsh winhttp set proxy localhost:8888
Damit sehen Sie dann auch die weitere Aufrufe der Exchange Online PowerShell gegen den Backend Service. Die URLs haben alle die Form.
"https://outlook.office.com/adminApi/beta/*"
- (Ab)using the REST API endpoints behind
the new ExO cmdlets
https://www.michev.info/Blog/Post/2869/abusing-the-rest-api-endpoints-behind-the-new-exo-cmdlets - Using Fiddler to examine remote
PowerShell sessions
https://www.michev.info/Blog/Post/2946/using-fiddler-to-examine-remote-powershell-sessions
Weitere Links
- Exchange PowerShell V3
- EXO PowerShell als Application
- Exchange PowerShell
- PowerShell 7
- PowerShell Core
- Office 365 - PowerShell
- MGgraph Mail
-
Moving from the Exchange PowerShell v1
Module to the v2 Preview
https://techcommunity.microsoft.com/t5/exchange-team-blog/moving-from-the-exchange-powershell-v1-module-to-the-v2-preview/ba-p/3450679 -
Understanding the Different Versions of
Exchange Online PowerShell Modules and Basic
Auth
https://techcommunity.microsoft.com/t5/exchange-team-blog/understanding-the-different-versions-of-exchange-online/ba-p/3394487 - Modern Auth and Unattended Scripts in
Exchange Online PowerShell V2
https://techcommunity.microsoft.com/t5/exchange-team-blog/modern-auth-and-unattended-scripts-in-exchange-online-powershell/ba-p/1497387 - Practical 365: Manage Exchange Online at
Scale
https://practical365.com/manage-exchange-online-at-scale/
Sehr gute Aufbereitung der Exchange Online PowerShell in größeren Umgebungen mit wichtigen Tipps - New Exchange Online PowerShell V2
https://jaapwesselius.com/2020/04/09/new-exchange-online-powershell-v2/ - Connect to Exchange Online PowerShell
without Basic Authentication
https://o365reports.com/2019/12/11/connect-exchange-online-powershell-without-basic-authentication - (Ab)using the REST API
endpoints behind the new ExO
cmdlets
https://www.michev.info/Blog/Post/2869/abusing-the-rest-api-endpoints-behind-the-new-exo-cmdlets - Hacking your way around Modern
authentication and the PowerShell modules
for Office 365
https://www.michev.info/Blog/Post/1771/hacking-your-way-around-modern-authentication-and-the-powershell-modules-for-office-365 - Working with the new Exchange Cmdlets
https://resources.quadrotech-it.com/webinar/working-with-new-exchange-cmdlets - AADInternals
https://www.powershellgallery.com/packages/AADInternals/0.3.3 - Troubleshooting Office 365 Hybrid
Configuration - Issues with new tenants and
deprecated Remote PowerShell RPS
https://itpro-tips.com/office-365-hybrid-configuration-issues-with-new-tenants-and-deprecated-remote-powershell-rps/