M365Con 2027 – gratis online conferentie · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Verbinden met Exchange Online PowerShell: stap-voor-stapgids

By ·

Verbinding maken met Exchange Online PowerShell via Connect-ExchangeOnline: vereisten, interactief aanmelden, MFA, opties voor partners en onbemande scripts, en oplossingen voor fouten.

Automatically translated with AI from the original post. Read the English original

Om verbinding te maken met Exchange Online PowerShell laad je de module ExchangeOnlineManagement en voer je Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com uit. Er opent een aanmeldvenster, je voert je wachtwoord in en keurt de MFA-prompt goed, en de shell is verbonden. Dit artikel is bedoeld voor Exchange- en Microsoft 365-beheerders die de exacte stappen nodig hebben, de opties voor toegang via partners en onbemande scripts, en een korte lijst met oplossingen wanneer de verbinding mislukt. Het volgt de actuele Microsoft-documentatie, dus de opdrachten hier gaan uit van moderne authenticatie en geen externe PowerShell-sessie.

Belangrijkste punten

  • Om verbinding te maken met Exchange Online PowerShell laad je de module en voer je Connect-ExchangeOnline uit met je beheerdersaccount in UPN-indeling.
  • Interactief aanmelden werkt met en zonder multifactorauthenticatie, dus je hebt geen aparte MFA-omweg nodig.
  • Basisauthenticatie en de oude methode New-PSSession worden niet meer ondersteund, dus scripts die daarop leunen moeten worden herschreven.
  • Gebruik Get-AcceptedDomain als snelle test na het verbinden, en sluit de sessie altijd af met Disconnect-ExchangeOnline.
  • Onbemande scripts moeten app-only authenticatie of een beheerde identiteit gebruiken in plaats van een opgeslagen wachtwoord.

Wat je nodig hebt voordat je verbinding maakt

De verbindingsopdracht komt uit de module, dus de module moet eerst geïnstalleerd zijn. Heb je dat nog niet gedaan, installeer hem dan vanuit de PowerShell Gallery met Install-Module -Name ExchangeOnlineManagement. De module heet in de documentatie van Microsoft de V3-module. Microsoft behandelt zowel Windows PowerShell 5.1 als PowerShell 7. Voor PowerShell 7 heb je moduleversie 2.0.4 of hoger nodig.

Vier andere zaken bepalen of de verbinding lukt:

  • Machtigingen. Role-based access control bepaalt welke cmdlets je kunt uitvoeren zodra je verbonden bent. Verbinden is niet het lastige deel, maar de juiste cmdlet uitvoeren wel. Microsoft heeft een pagina over het vinden van de machtigingen die een cmdlet nodig heeft, en die is het bookmarken waard.
  • PowerShell-toegang voor het account. Het account moet gebruik mogen maken van Exchange Online PowerShell. Als een beheerder dat voor jouw gebruiker heeft uitgeschakeld, lukt het aanmelden wel, maar de verbinding niet.
  • Netwerk. TCP-poort 80 moet open staan tussen je computer en Microsoft 365.
  • Een schoon profielpad. Volgens Microsoft kunnen verbindingsopdrachten mislukken als het pad van je gebruikersprofiel speciale PowerShell-tekens bevat, zoals $. Gebruik een ander account als je gebruiker zo'n pad heeft.

Je hoeft ook niets aan WinRM te wijzigen. Huidige verbindingen gebruiken onder de motorkap REST, dus het oude advies om Basisauthenticatie in WinRM in te schakelen geldt niet meer.

Stap voor stap verbinding maken met Exchange Online PowerShell

Dit is de standaard interactieve methode. Ze werkt op dezelfde manier in Windows PowerShell 5.1 en PowerShell 7, met of zonder multifactorauthenticatie.

  1. Open een nieuw PowerShell-venster. Een nieuw venster voorkomt assembly-conflicten met andere modules die je eerder in de sessie hebt geladen.
  2. Laad de module met Import-Module ExchangeOnlineManagement. Als de module al is geïnstalleerd, kun je deze stap meestal overslaan en direct naar de connect-opdracht gaan, omdat PowerShell de module automatisch laadt. Dat zegt Microsoft.
  3. Voer Connect-ExchangeOnline -UserPrincipalName admin@contoso.com uit, maar dan met je eigen account in UPN-indeling. In sommige organisaties kun je -UserPrincipalName weglaten, waarna je om de gebruikersnaam wordt gevraagd. Lukt dat niet, voeg de parameter dan toe.
  4. Voer je wachtwoord in het aanmeldvenster in en selecteer Aanmelden.
  5. Gebruikt je account MFA, voer dan de verificatiecode in en selecteer Verifiëren. De code wordt verzonden via de methode die je hebt ingesteld, bijvoorbeeld een sms of Microsoft Authenticator. In PowerShell 7 gebruikt de aanmelding standaard je browser.
  6. Wacht op de banner. Geen foutmelding betekent dat je verbonden bent.

Dat is alles. Dezelfde cmdlet maakt zonder extra parameters verbinding met PowerShell-sessies voor Microsoft 365 GCC. Alleen de andere clouds hebben een instelling nodig, die we hierna behandelen.

Wil je de welkomstbanner niet in een scriptlogboek, voeg dan -ShowBanner:$false toe. Wil je dat Get-Help hulp toont voor Exchange Online-cmdlets, voeg dan -LoadCmdletHelp toe. Sinds moduleversie 3.7.0 wordt die hulp niet meer standaard geladen. Dat verrast mensen die de module bijwerken en daarna zien dat Get-Help bijna niets teruggeeft.

Andere manieren om verbinding te maken: PowerShell 7, partners en clouds

De documentatie beschrijft verschillende varianten. Kies de variant die bij jouw situatie past.

PowerShell 7 zonder browser. Voer Connect-ExchangeOnline -Device uit. De opdracht toont een bericht waarin staat dat je https://microsoft.com/devicelogin moet openen en een code moet invoeren. Dat doe je op een ander apparaat: meld je aan, bevestig, en de oorspronkelijke sessie maakt verbinding. Dit werkt met en zonder MFA en is handig op servers of Linux-machines zonder bureaublad.

PowerShell 7 met inline-referenties. Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -InlineCredential werkt voor accounts zonder MFA. De meeste organisaties vereisen MFA voor beheerders, dus je gebruikt dit waarschijnlijk zelden.

Windows PowerShell 5.1 met een referentieobject. Voor accounts zonder MFA kun je eerst $Credential = Get-Credential uitvoeren en daarna Connect-ExchangeOnline -Credential $Credential. Microsoft merkt op dat je, als dit mislukt, beter -UserPrincipalName kunt gebruiken.

Klanttenants als partner. Partners in het Cloud Solution Provider-programma en gastbeheerders voegen -DelegatedOrganization toe, bijvoorbeeld Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization adatum.onmicrosoft.com. De pagina van Microsoft verwijst voor de machtigingen naar het Cloud Solution Provider-programma en granular delegated admin privileges (GDAP).

Overheids- en regionale clouds. Met -ExchangeEnvironmentName selecteer je de omgeving. De standaardwaarde is O365Default, die Microsoft 365 en GCC dekt. De gedocumenteerde waarden voor de andere omgevingen zijn O365USGovGCCHigh, O365USGovDoD, O365GermanyCloud en O365China.

Unattended scripts. Sla nooit een beheerderswachtwoord op in een script. Microsoft beschrijft twee betere opties. Een beheerde identiteit, bijvoorbeeld Connect-ExchangeOnline -ManagedIdentity -Organization "contoso.onmicrosoft.com", past bij scripts die in Azure draaien. App-only-authenticatie met een certificaat past bij al het andere. De parameter voor de certificaatvingerafdruk wordt alleen op Windows ondersteund. Voor de opzet heb je een app-registratie in Microsoft Entra ID nodig, de applicatiemachtiging Exchange.ManageAsApp met beheerdersconsent, een certificaat en een ondersteunde rol, zoals Exchange-beheerder, voor de app. Microsoft adviseert het principe van minimale rechten. Geef de app dus niet de rol Globale beheerder, tenzij er echt geen andere manier is. Volg het afzonderlijke artikel van Microsoft over app-only-authenticatie in plaats van een ingekorte versie ervan.

Voeg in een Windows-service -SkipLoadingFormatData toe om fouten te voorkomen. Als je fouten ziet die naar de Web Account Manager verwijzen, heeft moduleversie 3.7.2 of later daarvoor de schakelaar -DisableWAM.

Houd scripts beknopt: beperk wat je importeert

Een verbinding importeert normaal gesproken alle Exchange Online-cmdlets die je mag gebruiken. Dat is prima voor een snelle blik op een postvak, maar een script dat drie opdrachten nodig heeft, heeft ze niet allemaal nodig. De modulepagina van Microsoft geeft hier een specifieke tip. Frequente aanroepen van Connect-ExchangeOnline en Disconnect-ExchangeOnline in dezelfde sessie kunnen een geheugenlek veroorzaken. De oplossing is om per script één keer verbinding te maken en met de parameter -CommandName alleen de cmdlets te importeren die je nodig hebt.

Een script dat alleen postvakstatistieken uitleest, heeft bijvoorbeeld maar één opdracht nodig. Noem de paar opdrachten die je gebruikt, maak bovenaan één keer verbinding, voer het werk uit en verbreek de verbinding onderaan één keer. Scripts die zo zijn opgebouwd, zijn makkelijker te controleren, omdat de regel met de verbinding laat zien welke opdrachten het script gebruikt.

Twee andere gewoontes helpen in teamomgevingen. Ten eerste: houd de verbindingsregel op één plek, bijvoorbeeld in een kleine functie, zodat een wijziging van de authenticatiemethode één keer gebeurt en niet in twintig scripts. Ten tweede: log de account- of appnaam die het script heeft uitgevoerd, nooit het geheim. Als er onverwacht iets in een postvak verandert, bespaart die logregel je uren.

Controleer de verbinding en verbreek haar netjes

Een verbinding zonder foutmelding is een goed teken, maar test haar met een onschadelijke leesopdracht. Get-AcceptedDomain toont de domeinen van je organisatie en duurt een seconde. Als er domeinen verschijnen, werkt je sessie en heeft je account minstens leesrechten.

Om details over je verbindingen te zien, gebruik je Get-ConnectionInformation. De modulepagina van Microsoft wijst erop dat Get-PSSession voor deze op REST gebaseerde verbindingen niets bruikbaars teruggeeft. Oudere scripts die Get-PSSession controleren, moeten daarom worden aangepast.

Voer als je klaar bent Disconnect-ExchangeOnline uit. Voeg in scripts -Confirm:$false toe om de bevestigingsvraag over te slaan. Het artikel van Microsoft over verbindingen waarschuwt dat het sluiten van het venster zonder de verbinding te verbreken je beschikbare sessies kan opmaken, waarna je moet wachten tot ze verlopen.

Los de meest voorkomende verbindingsfouten op

De meeste fouten hebben een kleine lijst met oorzaken. Werk die van boven naar beneden af.

  • Onjuiste gebruikersnaam of wachtwoord. Doorloop de stappen opnieuw en controleer beide. Het klinkt triviaal, maar controleer eerst het UPN-formaat.
  • PowerShell-toegang is uitgeschakeld voor het account. Een beheerder kan dat inschakelen. Microsoft heeft een afzonderlijk artikel over het in- of uitschakelen van toegang tot Exchange Online PowerShell.
  • Poort 80 is geblokkeerd. Vraag je netwerkteam om TCP-poort 80 naar Microsoft 365 toe te staan.
  • Gefedereerd account met een onbereikbare identity provider. Als je IDP of STS niet publiek beschikbaar is, adviseert Microsoft om voor de verbinding een niet-gefedereerd account in Microsoft 365 te gebruiken.
  • "The term 'Update-ModuleManifest' is not recognized". De verbinding heeft PowerShellGet nodig, en de afhankelijkheid PackageManagement. Werk beide bij en start PowerShell opnieuw.
  • "Could not load file or assembly 'System.IdentityModel.Tokens.Jwt'". De module conflicteert met een andere module in dezelfde sessie. Maak verbinding in een nieuw Windows PowerShell-venster voordat je iets anders importeert.
  • Fouten in een venster dat is geopend door een service of een geplande taak. Probeer -SkipLoadingFormatData.

Als geen van deze situaties van toepassing is, is de moduleversie de volgende verdachte. Voer Update-Module -Name ExchangeOnlineManagement uit in dezelfde scope waarmee je de module hebt geïnstalleerd en probeer het opnieuw in een nieuw venster.

Veelgemaakte fouten

  • Basic-authenticatie gebruiken of New-PSSession. Microsoft vermeldt deze alleen als historische referentie en geeft aan dat ze niet langer worden ondersteund. Een script dat nog op deze manier een sessie opbouwt, moet overstappen naar Connect-ExchangeOnline.
  • Het venster sluiten in plaats van de verbinding verbreken. Dit kan je sessies uitputten. Zorg dat Disconnect-ExchangeOnline de laatste regel is van elk script.
  • Een wachtwoord in leesbare tekst in een script zetten. Gebruik in plaats daarvan een beheerde identiteit of een certificaat.
  • Eerst andere modules importeren. Een conflict met een andere module kan de aanmelding laten mislukken. Maak eerst verbinding met Exchange Online, of gebruik een nieuw venster.
  • Aannemen dat verbinding maken ook machtiging betekent. Als een cmdlet na het verbinden "niet herkend" wordt, bevat je rol die cmdlet niet. Dat is een RBAC-vraagstuk en geen verbindingsprobleem.

Gerelateerde onderwerpen om te verkennen

  • De module installeren en bijwerken: de verbinding hangt af van de juiste module en PowerShell-versie, dus lees de vereisten van de Exchange Online PowerShell-module voordat je deze uitrolt naar een team.
  • De machtigingen voor een cmdlet opzoeken: Microsoft legt uit hoe je opzoekt welke rol een specifieke Exchange-cmdlet nodig heeft.
  • Verbinding maken met Security & Compliance PowerShell: dezelfde module biedt Connect-IPPSSession, dat niet beschikbaar is in PowerShell 7 op Linux of macOS.
  • Onbeheerde automatisering: app-only-authenticatie en beheerde identiteiten zijn de veilige manier om geplande Exchange-scripts uit te voeren.
  • Grote bulktaken: op REST gebaseerde cmdlets hebben een time-out van 15 minuten, dus splits grote ledenupdates op in batches.

Volgende stap

Om betrouwbaar verbinding te maken met Exchange Online PowerShell, begin je met een nieuw venster, voer je Connect-ExchangeOnline -UserPrincipalName uit met je beheerdersaccount, test je met Get-AcceptedDomain en verbreek je de verbinding als je klaar bent. Plan daarna je onbeheerde scripts rond een beheerde identiteit of een certificaat, zodat niemand een wachtwoord hoeft in te typen of op te slaan.

Entities in this article

Exchange Online PowerShell PowerShell

Related articles

RSS