5 min read
Steigere deine IT Automations-Effizienz mit neuer ScriptRunner Version
Wir haben unser neuestes ScriptRunner-Update, Version 7.1, veröffentlicht. Dieses Update ist vollgepackt mit...
ScriptRunner Blog
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 zu ersetzen. Wir hoffen, dass die folgenden Ideen dir helfen werden.
Microsoft stellt Ende März 2024 einige wichtige PowerShell-Module ein. Die Module MS Online (MSOL) und Azure AD/Preview sind davon betroffen. Microsoft hat diese Änderungen zwar schon vor Jahren angekündigt und die Frist dann doch verlängert – jetzt ist es aber so weit.
Es bedeutet, dass es an der Zeit ist, sicher im Umgang mit Graph PowerShell zu werden und einen Weg zu finden, bisherige Abläufe mit den neuen Möglichkeiten zu gestalten. Einige Administratoren haben sich bereits an diese Änderungen gewöhnt und haben keine oder nur wenige Probleme, während andere feststellen werden, dass das Microsoft Graph PowerShell-Modul weniger flexibel oder gar hinderlich bei der Erledigung ihrer Aufgaben ist. In diesem Artikel gehen wir auf diese Herausforderungen ein, zeigen Beispiele, wie sich die Änderungen auf PowerShell Nutzer auswirken, und gehen auf die Hilfedokumentation von Microsoft für diese Veränderungen ein.
Wie bei großen Änderungen üblich, hat sich Microsoft Zeit genommen, um Administratoren schrittweise dazu anzuhalten, Änderungen vorzunehmen und sich auf die Zukunft vorzubereiten. Sie wurden fast zwei Jahre im Voraus angekündigt – als kleine Auswahl der Ankündigungen:
Juni 2022 / Juni 2023 / September 2023 / Dezember 2023
Microsoft hat Ressourcen bereitgestellt, die bei der Migration von Cmdlets, Skripten und Anwendungen helfen:
Mit diesem Tool kannst du dein Skript auf Kompatibilität prüfen. Es ist hier in der PowerShell Gallery verfügbar.
Wenn du Graph zum ersten Mal verwendest, ist der Prozess der Verbindung und Vorbereitung ähnlich wie bei anderen PowerShell-Modulen.
Installiere zunächst das Microsoft Graph SDK PowerShell-Modul:
Install-Module Microsoft.Graph
Importiere danach das Modul in PowerShell:
Import-Module Microsoft.Graph
Verbinden mit Graph: Dieses kurze Beispiel zeigt, dass es bei Graph einige Unterschiede gibt, da es in Bezug auf Aufgaben und Berechtigungen detaillierter ist. In diesem Artikel (von Microsoft) erfährst du mehr über die Verbindung zu Graph, die Auswahl von Berechtigungen und mehr.
Connect-MgGraph -Scopes 'Directory.ReadWrite.All'
In diesem Abschnitt sehen wir uns einige kurze Beispiele für Aufgaben an, die in den vorher verwendeten Modulen ausgeführt wurden, wir betrachten, wie sie jetzt in der Graph PowerShell ausgeführt werden können.
(Get-MsolUser).Count
(Get-MgUser -ALL).Count
Das obere Beispiel ist Graph mit 119 Nutzern und das untere Beispiel ist von MS Online mit ebenfalls 119 Nutzern.
Get-MsolUser | Where-Object UserType -eq Member | Sort-Object DisplayName
Um dasselbe im Graph-Modul zu erhalten, führen wir einen gefilterten Suchlauf/Abruf durch:
Get-MgUser -All -Filter "UserType eq 'Member'"
Die Standardausgabe ist unterschiedlich und muss daher angepasst werden, je nachdem, welche Eigenschaften des Nutzers gesucht werden.
Die Lizenzierung hat sich ebenfalls grundlegend geändert und die vorherigen Schritte müssen nun in Microsoft Graph durchgeführt werden. Zu diesem Thema hatte ich bereits einen Artikel für diesen Blog geschrieben. Hier ist der Artikel "Lizenzen und Microsoft Graph PowerShell" verlinkt.
Die Authentifizierung eines Kontos in einem Microsoft 365-Tenant kann einige zusätzliche Authentifizierungsmethoden (auch als MFA bekannt) erfordern, um die Person, die sich mit dem Konto verbindet, weiter zu verifizieren. Im MSOnline-Dienst gibt es eine Möglichkeit, die Einstellungen für die starke Authentifizierung festzulegen, aber mit dem Wegfall dieses Moduls ist Graph nun unser Werkzeug. Die Graph PowerShell hat eine gewisse Komplexität und Detailliertheit, die wir hier untersuchen werden. Zunächst zu MSOnline:
$st = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$st.RelyingParty = "*"
$st.State = "Enabled"
$sta = @($st)
Set-MsolUser -UserPrincipalName damian@practicalpowershell.com -StrongAuthenticationRequirements $sta
Graph verfügt über zahlreiche Cmdlets, aber bedenke, dass das obige Cmdlets nicht nur in Bezug auf die Methode (MFA pro Nutzer), sondern auch auf das Modul (MSOnline) als veraltet gilt. Wir können es über die Graph PowerShell anpassen. Frage zunächst die Konfiguration für einen Nutzer ab:
Get-MgUserAuthenticationMethod
-UserId damian@practicalpowershell.com | Format-List
Wir sehen, dass dieser Nutzer MFA konfiguriert hat und drei verschiedene Methoden zur Überprüfung verwendet. Mit Graph PowerShell können wir eine bestehende Methode mit Remove-MgUserAuthentication* cmdlets entfernen, neue Authentifizierungsmethoden mit New-MgUserAuthentication* cmdlets hinzufügen, die Authentifizierungsmethoden mit Update-MgUserAuthentication* cmdlets aktualisieren oder einzelne Einstellungen mit Get-MgUserAuthentication* cmdlets auflisten. Auch wenn eine MFA-Konfiguration pro Nutzer im Allgemeinen nicht empfohlen wird, kann es sein, dass wir Anpassungen vornehmen müssen, wenn ein Nutzer einen Nutzer hat oder wenn eine Authentifizierungsmethode einfach nicht funktioniert.
In diesem Beispiel fügen wir die Telefonauthentifizierungsmethode für einen Nutzer hinzu und geben seine Handynummer an:
$params = @{
phoneNumber = "+1 3125551212"
phoneType = "mobile"
}
New-MgUserAuthenticationPhoneMethod -UserId postmaster@powershellgeek.com -BodyParameter $params
In diesem Beispiel müssen wir dieselbe $params-Variable verwenden, um die neue Telefonnummer zu definieren. Außerdem benötigen wir die bestehende Telefonauthentifizierungsmethode, da wir mehrere Zeilen definiert haben könnten, und schließlich das Update-Cmdlet:
$PhoneAuthID = (Get-MgUserAuthenticationPhoneMethod -UserId postmaster@ powershellgeek.com).Id
$params = @{
phoneNumber = "+1 3125551212"
phoneType = "mobile"
}
Update-MgUserAuthenticationPhoneMethod -UserId postmaster@ powershellgeek.com -BodyParameter $params -PhoneAuthenticationMethodId $PhoneAuthId
Wenn wir eine bestehende Telefonauthentifizierungsmethode aktualisieren müssen (es kann nicht zwei vom gleichen Typ geben) oder wenn wir die Authentifizierungsmethode einfach entfernen wollen, können wir dies mit PowerShell tun:
$PhoneAuthID = (Get-MgUserAuthenticationPhoneMethod -UserId postmaster@powershellgeek.com).Id
Remove-MgUserAuthenticationPhoneMethod -UserId postmaster@powershellgeek.com -PhoneAuthenticationMethodId $PhoneAuthID
In diesem Beispiel, das üblicherweise verwendet wird, um neue Nutzer zu einer Lizenz- oder Berechtigungsgruppe hinzuzufügen, muss PowerShell eine CSV-Datei lesen, um eine Liste von Nutzern zu verarbeiten und dann die Gruppe aufzufüllen:
$CSV = Import-Csv .\MailboxesToAdd.txt
Foreach ($User in $CSV) {
$ID = $User.Alias
$UPN = $ID+'@mydomain.com'
$ObjectID = (Get-AzureADUser -ObjectId $UPN).ObjectID
Add-AzureADGroupMember -ObjectId a616b6a9-21ad-41f3-8204-f52e944d9df4 -RefObjectId $ObjectID
}
$CSV = Import-Csv .\MailboxesToAdd.txt
Foreach ($User in $CSV) {
$ID = $User.Alias
$UPN = $ID+'@mydomain.com'
$ObjectID = (Get-MgUser -UserId $UPN).Id
New-MgGroupMember -GroupId a616b6a9-21ad-41f3-8204-f52e944d9df4 -DirectoryObjectId $ObjectID
}
In diesem Beispiel sehen wir, dass sich zwei Cmdlets ändern, und zwar von den Azure AD Cmdlets zu Graph-spezifischen Cmdlets. Das ist ziemlich einfach. Beachte, dass sich in den meisten Fällen auch die Parameter ändern werden.
In diesem Beispiel fragen wir eine Liste von Eigenschaften eines Nutzers ab, die zur Dokumentation, Überprüfung oder möglicherweise zur Archivierung verwendet werden können, wenn ein Nutzerobjekt zwischen Tenants verschoben wird.
Get-AzureADUser -Top 500 | Where-Object UserType -eq member | Sort-Object DisplayName | Select-Object UserPrincipalName, DisplayName, GivenName, Surname, Mail, MailNickName, Company, Country, Department, Title, Mobile, PostalCode, State, StreetAddress, TelephoneNumber, UsageLocation | Export-Csv -Path "c:\downloads\atlantix\$Tenant-AzureAD-Export.csv" -NoTypeInformation
Da zwei verschiedene Module gleichzeitig eingestellt gesetzt werden und sich beide bereits überschneiden, kann es sein, dass einige Cmdlets in Azure AD und dem MSOnline PowerShell-Modul auf ein einziges Cmdlet im Graph PowerShell-Modul abgebildet werden. Hier einige Beispiele:
Get-CorrespondingGraphCommand Get-AzureADUser
Get-CorrespondingGraphCommand Get-MsolUser
Wir sehen, dass diese beiden Cmdlets aus verschiedenen Modulen in Graph den Get-MgUser als Nachfolger verwenden.
Beachte, dass es trotz der Überschneidung nicht ideal ist, da nicht alle Parameter und Optionen gleich sind, sodass eine echte Konvertierung Zeit und Lernen erfordert.
Ein weiteres Beispiel sind Gruppen, die in deinem Tenant existieren. In der Vergangenheit gab es eine Reihe von Cmdlets zur Verwaltung dieser Gruppen, sowohl von MSOnline als auch von AzureAD. Unten sehen wir, dass die Get-Cmdlets auf dasselbe Graph PowerShell Cmdlet verweisen:
Get-CorrespondingGraphCommand Get-MsolGroupMember
Get-CorrespondingGraphCommand Get-AzureADGroupMember
Wir sehen, dass das resultierende Cmdlet Get-MgGroupMember heißt:
Wenn wir ein entsprechendes Cmdlet in Graph finden wollen, haben wir mehrere Möglichkeiten, es zu suchen:
.
Verwende dieses clevere Tool, das auf die vorherige Seite verweist und das neue Cmdlet aufruft.
When finding a corresponding cmdlet in Graph, we have a couple of methods of discovery:
Kombiniere das Tool mit der Möglichkeit, zu prüfen, welche Graph-Berechtigungen für die Ausführung des Cmdlets erforderlich sind. Nimm zum Beispiel das Cmdlet Get-MsolUser, ein typisches Cmdlet aus dem MSOnline PowerShell Modul. Mithilfe des PowerShell-Moduls DependencySearch können wir das passende Cmdlet finden und ein Graph-Cmdlet verwenden, um die Berechtigungen zu ermitteln:
$NewCmdlet = (Get-CorrespondingGraphCommand Get-MSOLUser).GraphCommand
(Find-MgGraphCommand $NewCmdlet).Permissions
Nachfolgend findest du einen Auszug aus den Ergebnissen dieser beiden One-Liner:
Auszug aus der vollständigen Liste der Berechtigungen für das Cmdlet Get-MsolUser
Die einzige Komplikation besteht darin, dass einige Cmdlets eine lange Liste von Berechtigungen haben, die den Zugriff auf das Cmdlet erlauben. Wenn möglich, wähle die geringste Berechtigung, beginnend mit den Leseversionen der Berechtigungen.
Es ist eine Sache, ein einzelnes Cmdlet zu übersetzen, aber es ist etwas ganz anderes, wenn wir ganze Skripte haben, für die wir die gleiche Übersetzung brauchen. Mit dem Modul DependencySearch können wir unsere Skripte auf mögliche Probleme untersuchen. Im folgenden Beispiel ermitteln wir zunächst alle verfügbaren Module und wenden dann die Suchfunktion auf das Beispielskript "C:\Repository\ScriptToAnalyze.ps1" an.
$AvailableModule = @(Get-Module -ListAvailable)
Get-CodeDependency -scriptPath "C:\Repository\ScriptToAnalyze.ps1" -AvailableModules $AvailableModule
Die Ergebnisse dieser beiden Zeilen geben dann Cmdlets aus, die durch Graph-Cmdlets ersetzt werden müssen:
Microsoft hat die Endtermine für diese Änderung mehrfach verschoben. Jetzt ist es an der Zeit, die Änderungen vorzunehmen, den Umgang mit Graph zu lernen und sich von den bisherigen, veralteten PowerShell-Modulen zu trennen. Andernfalls kann es passieren, dass du ein kritisches Skript hast, das nicht mehr funktioniert, oder noch schlimmer, dass ein Geschäftsprozess nicht mehr funktioniert und dein Unternehmen finanzielle Verluste erleidet.
Mit unseren ScriptRunner MS Graph Targets kannst du die Verwendung von MS Graph für die Verwaltung deiner Microsoft 365-Abonnements vereinfachen und zentralisieren.
Mit unseren ScriptRunner MS Graph Queries kannst du ganz einfach Daten über die Microsoft Graph API empfangen.
Lies mehr in unserer ScriptRunner Online-Dokumentation.
In unserem Blogartikel zur Portal Edition R4 wurde die Einführung von Graph ArtikelMicrosoft Graph als neuem Service für M365-Targets beschrieben.
Hier ist unsere Online-Dokumentation
Sep 30, 2024 by Frank Kresse
Wir haben unser neuestes ScriptRunner-Update, Version 7.1, veröffentlicht. Dieses Update ist vollgepackt mit...
Aug 16, 2024 by Heiko Brenn
Willkommen im Scriptember! Wir freuen uns, einen ganz besonderen Monat ankündigen zu können: Wir feiern einen Monat...
Aug 14, 2024 by Jeffery Hicks
Wie gut bist du mit dem Thema vertraut? Vielleicht gibt dir dieser Artikel nur einen Überblick. Aus meiner Erfahrung in...
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".