Entra ID PowerShell
Warum brauch ich die Entra ID-Powershell, wo es doch die MGGraph PowerShell gibt? Dann ist diese Seite für euch. Die Entra ID PowerShell ersetzt in angeblich 98% der Fälle die schon lange abgeschaltete MSOnline und AzureAD PowerShell.
Ich habe das Thema auch als Audiodatei für einen
Podcast aufbereitet.
entra_powershell.mp3
Graph, MGGraph und Entra ID PowerShell
Viele Wege führen zum Ziel aber sie unterscheiden sich in der Nutzbarkeit, Geschwindigkeit, Sicherheit und Funktionsumfang und Lebendauer. Wenn Sie als Administrator ihre Konfigurationen in Entra ID automatisieren wollen, können Sie das per PowerShell machen. Zu Spitzenzeiten gab es neben der Verwaltung per Webbrowser in den Portalen https://admin.microsoft.com, https://portal.azure.com, https://entra.microsoft.com und weiter auch noch fünf API-Zugriffe:
| API | Beschreibung |
|---|---|
Microsoft Graph |
Am liebsten möchte Microsoft, dass ihre Kunden durchgehen mit Microsoft Graph arbeiten. Die meisten Schnittstellen sind gut dokumentiert aber es gibt noch Lücken im Umfang. So können Sie viele Exchange Online Aufgaben nur per Exchange Online PowerShell durchführen. Das betrachte ich aber nicht weiter. Sie können die Graph-API relativ einfach mit Invoke-Webrequest oder besser Invoke-RestMethod nutzen. |
MGGraph-PowerShell |
Etwas einfacher ist aber die Nutzung über die MGGraph PowerShell. Microsoft entwickelt diese stetig weiter und angeblich werden die Commandlets als auch die Dokumentation automatisch aus dem Quellcode generiert. Im Grunde ist die Graph-API und die Dokumentation auch sehr leistungsfähig. Auf die Nachteile gehe ich gleich noch ein |
Entra ID PowerShell |
Wenn es schon die
MGGraph PowerShell gibt, dann ist die Frage
erlaubt, warum es noch eine Entra ID PowerShell
gibt. Weil einige einfacher sind. Als
Administrator können Sie im lokalen Active
Directory ja auch mit dem "Servermanger" oder
der "MMC für AD Benutzer und Computer" oder auch
mit ADSIEDIT arbeiten. Alle leisten an vielen
Stellen das Gleiche aber doch anders.
|
MSOL-PowerShell |
Sie finden im Internet und auch auf der MSXFAQ noch sehr viele Beispiele mit Commandlets aus "*-MSOL*", die aber alle nicht mehr funktionieren. Das Module MSOnline ist abgekündigt und das Backend nicht mehr verfügbar
|
AzureAD PowerShell |
Das gleiche Schicksal hat die Azure AD PowerShell erlitten. Mit der Umbenennung von AzureAD zu Entra ID und dem Wechsel zu einem anderen Backend (Graph) ist die AzureAD PowerShell nicht weiter nutzbar. Es gibt
|
| DirSync API Entra ID Provisioning Service |
Microsoft nutzt mit Entra ID Connect eine weitere, allerdings nicht öffentliche, Schnittstelle zur Verwalten von Identitäten. Diese steht einem Administrator nicht direkt |
Schauen wir uns die Entra ID PowerShell einfach mal an.
Installation
Wenn ihr Client oder Server Zugriff zum Internet hat, dann können Sie die Entra-PowerShell direkt aus dem Repository installieren.
Install-Module Microsoft.Entra
Die Installation bringt nicht nur das eigentliche Modul, sondern auch die ein oder andere Abhängigkeiten mit.
Hinweis: Die Entra ID PowerShell gibt es für Windows Aner durch die Unterstützung von PowerShell 7 und Verzicht auf Windows-Abhängigkeiten funktioniert die Entra ID PowerShell auch unter Linux, MacOS und in Azure.
- Install Microsoft Entra PowerShell -
Microsoft Entra PowerShell
https://learn.microsoft.com/en-us/powershell/entra-powershell/installation?view=entra-powershell&tabs=powershell%2Cv1&pivots=windows
Abhängigkeiten zu anderen Modulen
An vielen Stellen und insbesondere den Fehlermeldungen sehen Sie, dass die EntraID PowerShell im Hintergrund auf Graph aufsetzt und zum Teil auch die MGGraph-Module mit nutzt. Das ist manchmal auch eine Fehlerursache. Viele Administratoren versuchen immer nur die aktuellste Version eines PowerShell-Moduls auf ihrem Rechner zu haben. Alte Module könnte ja Fehler oder Sicherheitslücken haben und innerhalb der Major-Version solle eine neuere Version ja rückwärtskompatibel sein
Wer hier vorschnell eine alte Version entsorgt, sieht eventuell folgenden Fehler:

connect-entra: The 'connect-entra' command was found in the module 'Microsoft.Entra.Authentication', but the module could not be loaded. For more information, run 'Import-Module Microsoft.Entra.Authentication'.
Wenn ich dann die Datei kontrollieren, dann finde ich folgende harte Verknüpfung zu Microsoft Graph PowerShell 2.25.0

Auszug aus %userprofile%\Documents\WindowsPowerShell\Modules\Microsoft.Entra.Authentication\1.0.10\Microsoft.Entra.Authentication.psd1
Als ich diese Seite am 7 Aug 2025 geschrieben habe, war Microsoft.Entra 1.0.10 aktuell, während die Microsoft.Graph.Authentication 2.25.0 schon über 9 Monate und durch 2.28.0, 2.29.0 und 2.29.1 ersetzt wurde:


Sie sollten daher nicht voreilig alle "alten Module" gleich entsorgen. Sollte ein Modul allerdings nachweislich einen Fehler enthalten oder sogar Schäden verursachen, dann sieht das anders aus. Das erforderliche ältere Modul können Sie aber immer wieder nachinstallieren, z.B. mit
Install-Module Microsoft.Graph.Authentication -MaximumVersion 2.25.0 -Force
Manchmal beschwert die die PowerShell aber auch, dass ein Modul mit dem Namen schon geladen. Das kann passieren, wenn Sie in der gleichen PowerShell auch noch die MGGraph-PowerShell in einer neueren Version nutzen. Dann ist z.B. schon die Version 2.29.1 des Moduls geladen und die Entra-PowerShell kann ihr Modul nicht mehr nachladen.
Get-EntraContext: The 'get-entraContext' command was found in the module 'Microsoft.Entra.Authentication', but the module could not be loaded due to the following error: [Could not load file or assembly ' Microsoft.Graph.Authentication, Version=2.25.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Assembly with same name is already loaded
Das passiert auch, wenn Sie nur eine Teilkomponente von MGGraph laden wollen und die Entra PowerShell schon eine ältere Version von "Microsoft.Graph.Authentication" geladen hat.

Der einfache Weg ist, eine neue PowerShell ohne MGGraph zu nutzen. Die Verwendung beider Module in der gleichen PowerShell ist nur möglich, wenn sie dann die passenden MGGraph-Module nutzen.
Abhängigkeit Execution Policy
Ein weiterer Fehler hast mich auf einem Server einige Minuten gekostet, weil die ExecutionPolicy auf "Restricted" stand. Der erste Fehler gibt nur den Hinweis, dass etwas mit dem Import-Module nicht passt, welches Connect-Entra wohl im Hintergrund aufruf:
PS C:\> Connect-Entra Connect-Entra : Der Befehl "Connect-Entra" wurde im Modul "Microsoft.Entra.Authentication" gefunden, das Modul konnte aber nicht geladen werden. Wenn Sie weitere Informationen wünschen, führen Sie "Import-Module Microsoft.Entra.Authentication" aus.
Wenn Sie dann aber manuell versuche, das Modul zu laden, dann sehen Sie doch die Ursache:
Import-Module : Die Datei "C:\Users\fcarius\Documents\WindowsPowerShell\Modules\Microsoft.Graph.Authentication\2.25.0\M icrosoft.Graph.Authentication.psm1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter "about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).
Wenn ihre PowerShell "restricted" ist, dann kann Connect-Entra ein Modul nicht laden. Erst wenn Sie das Module manuell laden sehen Sie den Fehler. Ein Wechsel mit "Set-ExecutionPolicy -ExecutionPolicy remotesigned" löst das Problem.
Verbinden
Ohne Entra ID macht die PowerShell keinen Sinn. Wie bei MGGraph PowerShell und anderen Modulen gibt es dazu ein "Connect-Entra"-Commandlet, welches die Session zu einem Tenant aufbaut.
Ich habe bislang keinen Weg gefunden, wie ich gleichzeitig zu zwei Tenants eine Verbindung aufbauen kann. Bei einigen Modulen ist dies möglich, weil ich bei Import-PSSession ein CMDLet-Prefix mitgeben kann.
# Interaktive "delegated" Anmeldung mit dem aktuellen Benutzer und Rechten für Get-EntraUser Connect-Entra -Scope User.Read.All # delegated Anmeldung an einen bestimmten Tenant. Man braucht die GUID des Tenants Connect-Entra -TenantID <guid des Tenant> -Scope User.Read.All
Weitere Parameter erlauben die Nutzung einer alternativen ClientID, z.B. um im Entra ID SignInLog und bei Conditional Access-Policies ihr Skript von anderen Programmen unterscheiden zu können. Auch eine Anmeldung mit einem Client-Zertifikat als App-Registration ist möglich. Sie können leider keinen UPN oder eine Tenantdomain abgeben. Ohne Angabe von weiteren Informationen startet ein Browser, indem Sie dann ihren Benutzernamen verwenden können. Die Entra PowerShell verbindet sich dann mit genau dem Tenant des Benutzer.
Im Hintergrund wird Graph genutzt und entsprechend kann ihre Applikation unterschiedliche Rechte mittels "-Scopes" anfordern. Wenn Sie ein Recht nicht anfordern, dann versucht die Entra PowerShell dieses dynamisch nachzufordern. Denken Sie aber immer daran, dass ein "Consent" durch den Benutzer bzw. Administrator erforderlich sein kann. Vergessen Sie nicht am Ende die Verbindung mit "Disconnect-Entra" zu schließen.
Wenn Sie übrigens prüfen wollen, ob es schon eine Verbindung zu Entra gibt, dann ist Get-EntraContext der richtige Weg. Das Commandlet ist "$null" und kann einfach abgefragt werden.
if (!(Get-EntraContext)) {
Write-Host "Connecting to Entra"
Connect-Entra
}
Wenn die Verbindung besteht, dann sehen Sie die aktuellen Parameter der Sitzung. Ich war hier als "Global Admin" meines Labortenants angemeldet.

Entsprechend umfangreich waren meine Rechte mit "ReadWrite.All" auf Users, Groups und Applications. Im Hintergrund kommt natürlich die Microsoft Graph PowerShell zum Einsatz. Das ist auch einfach zu ermitteln. Geben Sie einfach mal folgendes ein:
(get-command connect-entra).ScriptBlock
Nach all den "PARAM"-Angaben finden Sie dann folgende Zeilen (zur Lesbarkeit umgebrochen):
begin {
try {
$outBuffer = $null
if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer)) {
$PSBoundParameters['OutBuffer'] = 1
}
$wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand(
'Microsoft.Graph.Authentication\Connect-MgGraph',
[System.Management.Automation.CommandTypes]::Cmdlet)
$scriptCmd = { & $wrappedCmd @PSBoundParameters }
$steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
$steppablePipeline.Begin($PSCmdlet)
}
catch {
throw
}
}
- Connect-Entra (Microsoft.Entra)
https://learn.microsoft.com/en-us/powershell/module/microsoft.entra/connect-entra?view=entra-powershell - Disconnect-Entra
https://learn.microsoft.com/en-us/powershell/module/microsoft.entra/disconnect-entra?view=entra-powershell - Connect-Entra (Microsoft.Graph.Entra)
https://m365scripts.com/microsoft365/connect-entra/
Beispiel Get-MGUser vs. Get-EntraUser
Bei einem Kundeneinsatz ist das lokale Active Directory "verloren" gegangen und musste neu aufgebaut werden. In EntraID waren aber noch alle Benutzer vorhanden, da der "Verlust" auch ADSync getroffen hat und glücklicherweise wurde Entra ID nicht beschädigt. Da lag es dann doch nahe, die Informationen über die Anwender aus Entra ID in geeigneter Form zu extrahieren und mit den Daten die Benutzer im lokalen Active Directory samt ProxyAddresses und ms-ds-consistencyGUID (immutableID) wieder herzustellen. Allerdings hat mein erster Versuch per MGGraph-PowerShell mit "Get-MGUser" nicht auf Anhieb geklappt, da ich ja nicht nur die "Default Felder" sondern möglichst alle Felder erhalten wollte. Ein Export mit der MSOL-PowerShell oder AzureAD PowerShell ging aber auch nicht mehr (Siehe (EOL MSOnline und AzureAD PowerShell). Die MGGraph-Powershell hatte einige unschöne Effekte:
- Get-MGUser liefert nur eine Teilmenge der Properties
Das zurückgegebene Objekt hat natürlich alle Felder aber die meisten sind dann leer - Get-MGUser -Property * liefert nichts
Es gibt keinen einfachen Weg alle Properties zu laden. Ich muss mit dem Parameter eine Liste der Properties mitgeben. - Get-MGUser -Property "Lange Liste von Properties" liefert Fehler
Einfach weil der Request zu groß ist. Ich kann nicht alle Felder lesen - Get-MGUser -Property <name> liefert manchmal Fehler
Es gibt Felder, die liefert Get-MGUser im Objekt zurück aber wenn ich sie abfrage, dann kommen Fehler. Ich habe folgende Felder als "nicht abrufbar" mit den Standard-Rechten. - Einige Exchange Properties sind nicht erreichbar
Es gibt z.B. Exchange Online Kontakte, die in Entra ID nur eingeschränkte Properties haben. Auch andere Eigenschaften von Exchange Online Empfängern sind nicht in Entra ID und damit per Graph abrufbar. Hier bleibt dann nur die Exchange Online PowerShell
Ich wollte aber einfach meine Benutzer exportieren und ob sie es glauben oder nicht. Diese beiden Befehle haben den Job einfach erledigt:
Install-Module Microsoft.Entra Connect-Entra Get-EntraUser -All | Export-Clixml ".\entrauser.xml" Get-Entragroup -All | Export-Clixml ".\entragroup.xml"
Damit hatte die Entra ID PowerShell einen Fan mehr. Zukünftig schaue ich mir immer erst einmal die Entra ID-Commandlets an. Meist reichen Sie aus. Ich habe mir dann auch noch mal angeschaut, was z.B. Get-EntraUser genau macht. Auch das geht mit:
(get-command get-entrauser).ScriptBlock
Wir finden, dass Get-EntraUser explizit folgende Properties anfragt.

Und dann auch selbst direkt einen "Invoke-GraphRequest" macht.

Was seinerseits auch wieder nur ein Alias auf "Invoke-MGGraphRequest" ist.

- MGGraph PowerShell
- List users - Microsoft Graph v1.0 | Microsoft Learn
https://learn.microsoft.com/en-us/graph/api/user-list?view=graph-rest-1.0&tabs=powershell - Install Microsoft Entra PowerShell - Microsoft Entra
PowerShell
https://learn.microsoft.com/en-us/powershell/entra-powershell/installation?view=entra-powershell&tabs=powershell%2Cv1&pivots=windows - Get all Properties and exclude
AboutMe,DeviceEnmentLimit,Birthday,HireDate,Interests,MailboxSettings,MySite,PastProjects,PreferredName,Print,Responsibilities,Schools,Skills
https://doitpshway.com/adding-support-for-selecting-all-properties-using-wildcard-in-mg-graph-commands-property-parameter - user resource type - Microsoft Graph v1.0 - Properties
https://learn.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties - group resource type - Microsoft Graph v1.0 - Properties
https://learn.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0#properties
Fehler mit Graph-URL
Bei der Arbeit mit der Entra ID PowerShell sind mir ein paar Dinge aufgefallen, die ich weniger schön finde. Zum einen habe ich mal alle Entra ID Benutzer lesen wollen, die eine "ImmutableID" haben. Die Filter-Parameter verwenden ein anderes Forma als z.B. die LDAP-Filter der Active Directory Powershell und die Filter der Exchange PowerShell. Es passiert schnell, dass Sie einen ungültigen Filter angeben. Die Fehlermeldung verrät zwar auch den Fehler im Filter aber zeigt genau die komplette URL, welche die Entra ID PowerShell gegen Microsoft Graph auslöst:
PS C:\> Get-Entrauser -All -Filter "Immutableid like *" Invoke-MgGraphRequest: GET https://graph.microsoft.com/v1.0/users/?$select=Id,AccountEnabled,AgeGroup,OfficeLocation,AssignedLicenses,AssignedPlans ,City,CompanyName,ConsentProvidedForMinor,Country,CreationType,Department,DisplayName,GivenName,OnPremisesImmutableId,Jo bTitle,LegalAgeGroupClassification,Mail,MailNickName,MobilePhone,OnPremisesSecurityIdentifier,OtherMails,PasswordPolicie s,PasswordProfile,PostalCode,PreferredLanguage,ProvisionedPlans,OnPremisesProvisioningErrors,ProxyAddresses,RefreshToken sValidFromDateTime,ShowInAddressList,State,StreetAddress,Surname,BusinessPhones,UsageLocation,UserPrincipalName,External UserState,ExternalUserStateChangeDateTime,UserType,OnPremisesLastSyncDateTime,ImAddresses,SecurityIdentifier,OnPremisesU serPrincipalName,ServiceProvisioningErrors,IsResourceAccount,OnPremisesExtensionAttributes,DeletedDateTime,OnPremisesSyn cEnabled,EmployeeType,EmployeeHireDate,CreatedDateTime,EmployeeOrgData,preferredDataLocation,Identities,onPremisesSamAcc ountName,EmployeeId,EmployeeLeaveDateTime,AuthorizationInfo,FaxNumber,OnPremisesDistinguishedName,OnPremisesDomainName,I sLicenseReconciliationNeeded,signInSessionsValidFromDateTime&$Filter=immutableid%20like%20* HTTP/2.0 400 Bad Request Vary: Accept-Encoding Strict-Transport-Security: max-age=31536000 request-id: <guid> client-request-id: <guid> x-ms-ags-diagnostic: {"ServerInfo": {"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"006","RoleInstance":"FR1PEPF00001FC1"} } Date: Tue, 29 Jul 2025 21:44:52 GMT Content-Type: application/json Content-Encoding: gzip {"error":{"code":"BadRequest","message":"Invalid filter clause: Syntax error at position 16 in 'immutableid like *'.", "innerError":{"date":"2025-07-29T21:44:52","request-id":"<guid>","client-request-id": "<guid>"}}}
Nebenbei erfahren wir so, dass die EntraID wirklich im Request alle Felder einzeln aufführt, die es als Rückgabe haben möchte. Das müsste ich bei der Get-MGUser manuell alles mitliefern
Properties ohne Inhalte
"Get-EntraIDUser" hat einige interessante aber leere Properties. Hier ein Auszug meines Users. Am Anfang finden sie noch die normalen Entra ID Felder, die wir auch im Microsoft 365 Admin Center (admin.microsoft.com) oder Azure Portal (portal.azure.com) finden:
authorizationInfo : @{certificateUserIds=System.Object[]}
proxyAddresses : {x500:/o=ExchangeLabs/ou=Exchange Administrative Group
(FYDIBOHF23SPDLT)/cn=Recipients/cn=080aeabf04a64eefa2c6d284a61cf959-229a191d-c9, X500:/o=First
Organization/ou=Exchange Administrative Group
(FYDIBOHF23SPDLT)/cn=Recipients/cn=e2c0dbe2e6e34483a456715ec3c322c6-adm-f,
smtp:fc@msxfaqlab.onmicrosoft.com, x500:/o=ExchangeLabs/ou=Exchange Administrative
Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=c2d9031e35b1436f86a556cb86d4252e-fc…}
onPremisesSamAccountName : fc
securityIdentifier : S-1-12-1-580524317-1250871760-3147718023-3312322
officeLocation :
imAddresses : {}
externalUserStateChangeDateTime :
legalAgeGroupClassification :
onPremisesSecurityIdentifier : S-1-5-21-4124281298-819535733-1525930181-1005
serviceProvisioningErrors : {}
identities : {@{signInType=userPrincipalName; issuerAssignedId=fc@UCLABOR.DE;
issuer=msxfaqlab.onmicrosoft.com}}
ageGroup :
givenName : fc
onPremisesUserPrincipalName : fc@UCLABOR.DE
onPremisesImmutableId : 6NbBC47StxxxxxxeJdrJA==
surname :
employeeOrgData :
jobTitle :
onPremisesExtensionAttributes : @{extensionAttribute12=; extensionAttribute11=; extensionAttribute2=; extensionAttribute8=;
extensionAttribute7=; extensionAttribute13=; extensionAttribute3=; extensionAttribute9=;
extensionAttribute15=; extensionAttribute6=; extensionAttribute10=; extensionAttribute5=;
extensionAttribute4=; extensionAttribute1=; extensionAttribute14=}
companyName :
onPremisesProvisioningErrors : {}
preferredDataLocation :
mailNickname : fc
country :
employeeHireDate :
userType : Member
otherMails : {fc@carius.de}
userPrincipalName : fc@UCLABOR.DE
usageLocation :
passwordProfile :
onPremisesDistinguishedName : CN=fc,OU=AdminAccounts,OU=Accounts,DC=UCLABOR,DC=DE
isResourceAccount :
mobilePhone :
onPremisesDomainName : UCLABOR.DE
department :
createdDateTime : 10.09.2024 16:18:18
postalCode :
employeeId :
passwordPolicies : DisablePasswordExpiration
mail : fc@uclabor.de
creationType :
city :
state :
employeeType :
preferredLanguage :
businessPhones : {}
onPremisesSyncEnabled : True
faxNumber :
onPremisesLastSyncDateTime : 10.09.2024 17:18:05
employeeLeaveDateTime :
streetAddress :
showInAddressList :
assignedLicenses : {}
signInSessionsValidFromDateTime : 11.07.2017 09:13:45
provisionedPlans : {}
externalUserState :
assignedPlans : {}
consentProvidedForMinor :
accountEnabled : True
id : 229a191d-c9d0-4a8e-875d-9ebb201bec18
deletedDateTime :
displayName : fc
ObjectId : 229a191d-c9d0-4a8e-875d-9ebb201bec18
UserState :
UserStateChangedOn :
Mobile :
DeletionTimestamp :
DirSyncEnabled : True
ImmutableId : 6NbBC47StUChPrMMeJdrJA==
LastDirSyncTime : 10.09.2024 17:18:05
ProvisioningErrors : {}
TelephoneNumber : {}
AboutMe :
Activities :
AgreementAcceptances :
AppRoleAssignments :
Authentication : Microsoft.Graph.PowerShell.Models.MicrosoftGraphAuthentication
Birthday :
Calendar : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCalendar
CalendarGroups :
CalendarView :
Calendars :
Chats :
CloudClipboard : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCloudClipboardRoot
ContactFolders :
Contacts :
CreatedObjects :
CustomSecurityAttributes : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCustomSecurityAttributeValue
DeviceEnrollmentLimit :
DeviceManagementTroubleshootingEvents :
DirectReports :
Drive : Microsoft.Graph.PowerShell.Models.MicrosoftGraphDrive
Drives :
EmployeeExperience : Microsoft.Graph.PowerShell.Models.MicrosoftGraphEmployeeExperienceUser
Events :
Extensions :
FollowedSites :
HireDate :
InferenceClassification : Microsoft.Graph.PowerShell.Models.MicrosoftGraphInferenceClassification
Insights : Microsoft.Graph.PowerShell.Models.MicrosoftGraphItemInsights
Interests :
IsManagementRestricted :
JoinedTeams :
LastPasswordChangeDateTime :
LicenseAssignmentStates :
LicenseDetails :
MailFolders :
MailboxSettings : Microsoft.Graph.PowerShell.Models.MicrosoftGraphMailboxSettings
ManagedAppRegistrations :
ManagedDevices :
Manager : Microsoft.Graph.PowerShell.Models.MicrosoftGraphDirectoryObject
MemberOf :
Messages :
MySite :
Oauth2PermissionGrants :
Onenote : Microsoft.Graph.PowerShell.Models.MicrosoftGraphOnenote
OnlineMeetings :
Outlook : Microsoft.Graph.PowerShell.Models.MicrosoftGraphOutlookUser
OwnedDevices :
OwnedObjects :
PastProjects :
People :
PermissionGrants :
Photo : Microsoft.Graph.PowerShell.Models.MicrosoftGraphProfilePhoto
Photos :
Planner : Microsoft.Graph.PowerShell.Models.MicrosoftGraphPlannerUser
PreferredName :
Presence : Microsoft.Graph.PowerShell.Models.MicrosoftGraphPresence
Print : Microsoft.Graph.PowerShell.Models.MicrosoftGraphUserPrint
RegisteredDevices :
Responsibilities :
Schools :
ScopedRoleMemberOf :
Settings : Microsoft.Graph.PowerShell.Models.MicrosoftGraphUserSettings
SignInActivity : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSignInActivity
Skills :
Solutions : Microsoft.Graph.PowerShell.Models.MicrosoftGraphUserSolutionRoot
Sponsors :
Teamwork : Microsoft.Graph.PowerShell.Models.MicrosoftGraphUserTeamwork
Todo : Microsoft.Graph.PowerShell.Models.MicrosoftGraphTodo
TransitiveMemberOf :
AdditionalProperties : {}
Weiter unten finden wir aber Felder wie "Calendar, Chat, CloudClipboard, MailboxSettings, Planner, Presence, Print, ToDo", die bei mir aber bislang immer leer geblieben sind. Auch z.B. ein Versuch die Rechte zum Lesen von Chat zu erhalten und dann mehr zu erhalten, hat nichts geändert.
# Anforderung des Rechts Chat.Read Connect-Entra -Scopes Chat.Read #Abruf des Users mit expliziter Angabe des Property (Get-EntraUser -UserId fc@msxfaqlab.onmicrosoft.com -Property chat).chat
Das Ergebnis war immer "$null". Bei anderen Propereties wie "Todo", "Calendar", "Presence" bekomme ich ein Objekt mit Properties zurück, die aber auch leer sind:

Ich weiß aktuell noch nicht, was ich mit diesen Properties anfangen soll, wenn sie keinen Inhalt liefern.
- Get user - Microsoft Graph v1.0
https://learn.microsoft.com/en-us/graph/api/user-get - List messages in a chat - Microsoft
Graph v1.0
https://learn.microsoft.com/en-us/graph/api/chat-list-messages
Bewertung
Das erste Ziel der von Microsoft bereitgestellten Entra PowerShell dürfte der Ersatz der nicht mehr nutzbaren EOL MSOnline und AzureAD PowerShell sein. Darauf weist schon die Definition als Alias hin.

Die Entra-PowerShell selbst ist aber auch nicht eigenständig, sondern eher ein Wrapper verschiedener Aufrufe der MGGraph PowerShell. Steht irgendwo dazwischen und mit der statischen Versionsabhängigkeit kann sie sogar "stören" wirken. Dennoch macht sie einige Aufrufe erst einmal einfacher, da Sie sich ähnlich wie die frühere Azure AD-PowerShell verhält und einige Aufrufen und Rückgaben direkt genutzt werden können, bei denen Sie mit der MGGraph-PowerShell vielleiht mehr Code drum herum bauen müssten. Sie geben aber natürlich auch etwas Kontrolle ab. Vergleichen Sie die Entra ID Powershell mit der MGGraph-PowerShell wie die Koexistenz der "MMC für Active Directory Benutzer und Computer" und ADSIEDIT. Beide können zum großen Teil die gleichen Aktionen ausführen aber manchmal muss es ADSIEDIT sein aber meist reicht die normale MMC.
Weitere Links
- MGGraph PowerShell
- EOL MSOnline und AzureAD PowerShell
- Microsoft Entra PowerShell documentation
- Microsoft Entra PowerShell
https://learn.microsoft.com/en-us/powershell/entra-powershell/?view=entra-powershell - about_Functions_Advanced_Parameters -
PowerShell - Alias Attribute
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters?view=powershell-7.5#alias-attribute















