Website-Suche

Verwenden von Power Automate und Azure Automation zur Verwaltung des Lebenszyklus von SharePoint-Sites


Die Ausbreitung von SharePoint ist ein echtes Problem

Ein wichtiger Aspekt einer gut verwalteten Microsoft 365-Umgebung besteht darin, sicherzustellen, dass Objekte wie SharePoint-Websites (und damit auch Microsoft Teams) entfernt werden, wenn sie nicht mehr benötigt werden. Ich habe mit vielen Organisationen gesprochen, die ihren Microsoft 365-Mandanten bereitgestellt haben, ohne darüber nachzudenken, wie sie den Lebenszyklus von Websites verwalten sollen. Das Endergebnis ist normalerweise Bedauern. Während das Problem in den ersten paar Jahren normalerweise nicht auftritt, bemerken Mieteradministratoren mit der Zeit, dass die starke Verbreitung von Objekten in ihrem Mieter die tägliche Verwaltung sehr erschwert. Beispielsweise sind in Umgebungen ohne angemessene Governance häufig große Mengen veralteter Daten auf eine große Anzahl von SharePoint-Websites verteilt, was zu Verwirrung bei Administratoren und Benutzern führt.

In diesem Artikel erkunde ich, wie man relativ grundlegende PowerShell- und Azure-Automatisierungskenntnisse mit Power Automate kombiniert, um eine saubere, robuste Möglichkeit zu schaffen, Ihren Microsoft 365-Mandanten vor übermäßiger Ausbreitung zu schützen.

Warum Gruppenablaufrichtlinien für Sie möglicherweise nicht funktionieren

Die Antwort von Microsoft auf die Gruppen-/Teamwucherung ist die Gruppenablaufrichtlinie. Grundsätzlich funktioniert der Ablauf gut als einfache Möglichkeit, ältere oder inaktive Gruppen innerhalb eines Microsoft 365-Mandanten zu entfernen, obwohl begrenzte Signale von Microsoft Graph den aktivitätsbasierten Ablauf unzuverlässig machen können. Ablaufrichtlinien ermöglichen es Gruppeneigentümern, das Entfernen einer Gruppe zu genehmigen oder die Gruppe zu erneuern, um das Löschen zu verhindern. Dabei werden mehrere Erinnerungen an Benutzer gesendet, um sicherzustellen, dass Verlängerungen nicht verpasst werden.

Das Problem mit der Ablaufrichtlinie besteht darin, dass Ihre Anforderungen nicht genau in die Vision von Microsoft für den Gruppenablauf passen. Beispielsweise wird pro Mandant nur eine einzige Gruppenablaufrichtlinie unterstützt. Alle Gruppen, die in den Geltungsbereich der Ablaufrichtlinie fallen, haben den gleichen Ablaufzeitraum. Ein weiteres Beispiel wäre, wenn Sie Gruppen haben, die Sie nicht in die Ablaufrichtlinie einbeziehen möchten. Eine Ablaufrichtlinie verfügt über zwei Einstellungen für die Zuweisung: entweder alle Gruppen oder ausgewählte Gruppen (bis zu maximal 500). Darüber hinaus konzentrieren sich Gruppenablaufrichtlinien (wie der Name schon sagt) ausschließlich auf gruppenverbundene Teamwebsites und decken keine anderen SharePoint Online-Websites ab, z. B. Kommunikationswebsites. Gruppenablaufrichtlinien erfordern außerdem eine Entra ID Premium-Lizenzierung, was für einige Organisationen ein Hindernis sein kann.

Während Ablaufrichtlinien in manchen Situationen nützlich sind, überzeugt der Mangel an Flexibilität und Anpassung bei der Kontrolle des Gruppenablaufs Mieter oft davon, irgendeine Form einer benutzerdefinierten Lösung auszuprobieren.

Kombination von Azure Automation und Power Automate

Zahlreiche Artikel zu Practical 365 zeigen den Wert von Azure Automation bei der Notwendigkeit, Verwaltungsvorgänge zu automatisieren. Ich habe beispielsweise zuvor über ein ähnliches Thema geschrieben, bei dem es darum ging, mithilfe von Automatisierung für Ordnung in Teams zu sorgen. Für wiederholbare, programmgesteuerte Aufgaben ist Azure Automation ein fantastisches Tool, das jeder Mandantenadministrator in seiner Toolbox haben sollte. Azure Automation kann einen Großteil der schweren Arbeit für diese Lösung übernehmen, aber eine Sache, die es nicht leisten kann (aufgrund der Natur von Azure Automation, bei der einfache Skripts auf einer gehosteten Linux-Box ausgeführt werden), ist der Genehmigungsprozess für das Löschen von Objekten.

Hier kommt Power Automate ins Spiel. Insbesondere die Genehmigungsfunktion in Power Automate ist eine einfache Möglichkeit, benutzerfreundliche Genehmigungsabläufe zu erstellen. Genehmigungsbenachrichtigungen können für Benutzer sowohl in Teams als auch in Outlook verwaltet werden, sodass die Reaktion auf Ablaufbenachrichtigungen relativ einfach ist.

Schließlich muss eine Liste der einzubeziehenden Websites und der zugehörigen Ablaufzeiten geführt werden. Es gibt mehrere Optionen zum Speichern einer Liste von Gruppen, die Ablaufprüfungen unterliegen, z. B. eine CSV-Datei in SharePoint oder Azure Storage oder eine Dataverse-Tabelle. Für dieses Beispiel verwende ich eine SharePoint-Liste, da diese einfach zu verwalten ist und den grundlegenden Versionsverlauf und die Überwachungsprotokollierung unterstützt. Wenn alles vorhanden ist, folgt der Prozessablauf der Gliederung in Abbildung 1.

SharePoint-Tracking-Liste

Um den Genehmigungsstatus zu verfolgen, verwende ich eine SharePoint-Liste, die die wichtigsten Details enthält, die zum Verwalten des Ablaufs von Websites erforderlich sind. Die Liste enthält die in Tabelle 1 aufgeführten Spalten.

Column Name

Details

SiteName

Ein Personenfeld wird verwendet, um einen oder mehrere Genehmiger für jede Site zu definieren

SiteURL

Die URL der Website

RetentionDays

Der Ablaufzeitraum in Tagen für die Site

RemainingDays

Wird verwendet, um zu verfolgen, wie viele Tage bis zum Ablauf verbleiben

MarkedforDeletion

Ein Auswahlfeld, um zu verfolgen, ob eine Site gelöscht werden soll. Die verfügbaren Optionen sind: „Ja“, „Nein“ und „Ausstehende Genehmigung“.

DeletedOn

Wird verwendet, um das Datum zu verfolgen, an dem eine Website gelöscht wurde

Approver

Ein Personenfeld, das zum Definieren eines oder mehrerer Genehmiger für jede Site verwendet wird

Die Tracking-Liste (Abbildung 2) enthält die Details und den aktuellen Status jeder Site im Rahmen des Ablaufprozesses. Wenn eine Site nicht auf der Liste steht, unterliegt sie keinem Ablaufdatum.

Achten Sie beim Erstellen der Tracking-Liste darauf, die Spalten „Deletedon“, „MarkedforDeletion“ und „SiteURL“ zu indizieren, damit sie für Graph-API-Anfragen durchsuchbar sind. Die Indexeinstellungen für diese Liste sind in Abbildung 3 dargestellt.

Power Automate Flow

Power Automate ist sehr flexibel und der Ablauf zur Prozessgenehmigung kann an die Anforderungen des Unternehmens angepasst werden. Ich werde hier nicht näher auf die grundlegenden Details der Erstellung von Power Automate-Abläufen eingehen, aber ich empfehle die Lektüre von „Teams und Power Automate: Praktische Beispiele zur Automatisierung von Aufgaben“, wenn Sie mit Power Automate nicht vertraut sind.

Der Power Automate-Flow für den Ablaufprozess beginnt mit einem geplanten Auslöser, der einmal pro Tag ausgeführt wird. Jeden Tag überprüft der Flow die Tracking-Liste und wenn der Wert „RemainingDays“ nicht bereits 0 ist, wird er um reduziert. Der Auslösevorgang ist in Abbildung 4 dargestellt.

Wenn der Wert „RemainingDays“ bereits 0 ist, ist die Site abgelaufen und der Genehmigungsprozess wird ausgeführt. Die Spalte „MarkedForDeletion“ wird mit dem Wert „PendingApproval“ aktualisiert und eine Genehmigung wird an die in der Spalte „Genehmiger“ aufgeführten Benutzer gesendet. Die Konfiguration für den Fluss ist in Abbildung 5 dargestellt.

Die Genehmigung wird dann über Teams und Outlook an die Liste der Genehmiger gesendet. Die Genehmiger haben die Möglichkeit, die Löschung zu genehmigen oder abzulehnen und die Lebensdauer der Gruppe erneut zurückzusetzen (Abbildung 6).

Wenn schließlich einer der Genehmiger die Anfrage genehmigt, aktualisiert der Ablauf das Feld „MarkedforDeletion“ auf „Ja“. Wenn sie die Anfrage ablehnen, setzt der Flow die „RemainingDays“ zurück, um sie an den „RetentionDays“-Wert anzupassen, und startet die Ablaufzeit neu (Abbildung 7).

Azure Automation Runbook

Das Automation-Konto und das Runbook sind der letzte für die Lösung erforderliche Konfigurationsbestandteil. Der Code, den ich in diesem Beispiel verwende, ist auf GitHub verfügbar. Das Runbook verwendet vier PowerShell-Module, die als Ressourcen für das Automatisierungskonto hinzugefügt werden müssen:

  • Microsoft.Graph.Authentication ist für die Authentifizierung bei der Microsoft Graph-API erforderlich.
  • Microsoft.Graph.Groups wird benötigt, um das Löschen von mit Gruppen verbundenen Sites zu verarbeiten.
  • Microsoft.Graph.Sites wird benötigt, um Daten auf jeder Site zu sammeln.
  • PnP.PowerShell ist erforderlich, um das Löschen von Kommunikationsseiten zu verarbeiten, da dies noch nicht von der Microsoft Graph-API unterstützt wird.

Weitere Informationen zum Installieren und Aktualisieren von Modulen für Azure Automation finden Sie in diesem Artikel.

Das Automation-Konto verwendet eine vom System zugewiesene verwaltete Identität zur Authentifizierung bei Microsoft Graph und PnP PowerShell - ähnlich der Erklärung in diesem Artikel. Die Berechtigungen, die dem Dienstprinzipal der verwalteten Identität zugewiesen werden müssen, sind:

  • Microsoft Graph - Group.ReadWrite.All - Erforderlich zum Löschen von mit Gruppen verbundenen Websites
  • Microsoft Graph - Sites.FullControl.All - Erforderlich zum Abrufen von Site-Informationen und zum Verwalten von Sites
  • Office 365 SharePoint Online - Sites.Manage.All - Erforderlich zum Löschen von Kommunikationsseiten über PNP PowerShell

Dieser Beispielcode zeigt, wie Sie Graph- und SharePoint-Berechtigungen zu einem Azure Automation-Konto hinzufügen. Der Code listet zunächst die erforderlichen Graph-Berechtigungen auf, ruft die Dienstprinzipal-ID des Automatisierungskontos ab, ruft den Dienstprinzipal der Microsoft Graph-Anwendung ab und weist dann die Berechtigungen dem Automatisierungskonto zu. Dieser Vorgang wird dann für die Office 365 SharePoint Online-App wiederholt. Dieser Prozess wird in diesem Artikel zur Verwendung von Azure Automation Managed Identities mit RBAC für Anwendungen ausführlicher beschrieben.

##List Required Permissions
$Permissions = @(
    "Group.ReadWrite.All"
    "Sites.FullControl.All"
)
##Add Managed Identity ID
$MIID = "<Replace with Managed Identity Service Principal ID>"”
##Get Roles for Permissions
$GraphApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'" # Microsoft Graph
[array]$Roles = $GraphApp.AppRoles | Where-Object {$Permissions -contains $_.Value}
##Loop through and add each role
foreach($role in $roles){
    $AppRoleAssignment = @{
        "PrincipalId” = $MIID
        "ResourceId" = $GraphApp.Id
        "AppRoleId" = $Role.Id
    }
    # Assign the Graph permission
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MIID -BodyParameter $AppRoleAssignment
}
##List Required Permissions
$Permissions = @(
    "Sites.Manage.All"
)
##Get Roles for Permissions
$SPApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0ff1-ce00-000000000000'" # SharePoint Online
[array]$Roles = $SPApp.AppRoles | Where-Object {$Permissions -contains $_.Value}
##Loop through and add each role
foreach($role in $roles){
    $AppRoleAssignment = @{
        "PrincipalId" = $MIID
        "ResourceId" = $SPApp.Id
        "AppRoleId" = $Role.Id
    }
    # Assign the SharePoint permission
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MIID -BodyParameter $AppRoleAssignment
}

Wenn das Skript ausgeführt wird, erkennt es Listenelemente, die zum Löschen markiert sind, und verarbeitet die Löschung der zugehörigen Site. Sobald das Objekt zum Löschen verarbeitet wird, wird das Löschdatum zum Feld „DeletedOn“ in der Tracking-Liste hinzugefügt. Wenn keine Objekte zum Löschen markiert sind, wird das Skript beendet.

Eine flexible Lösung

In diesem Artikel habe ich eine Möglichkeit beschrieben, mit Power Automate und Azure Automation ein reales Problem zu lösen. Es gibt auch viel, was getan werden kann, um diesen Prozess zu verbessern. Beispielsweise wäre es hilfreich, die jüngsten Aktivitäten auf Websites als Maß für den Ablauf zu betrachten. Ich habe hier auch eine minimale Fehlerbehandlung eingebaut, um die Sache relativ auf den Punkt zu bringen.

Die Kombination der Microsoft-Tools, wie ich sie hier gezeigt habe, kann Mieteradministratoren dabei helfen, einige überraschend komplexe Aufgaben mit einem relativ einfachen automatisierten Prozess zu erledigen. In Zukunft könnte Microsoft eine bessere Lösung zur Verwaltung des Ablaufs von Websites und Teams liefern. Bis dahin können Administratoren jederzeit ihre eigenen Lösungen erstellen und diese mit der Community teilen.

Verwandte Artikel