bkp_m365_restore --to-tenant schreibt einen gesicherten Lauf zurück nach Microsoft 365: Mails, Termine, Kontakte und Aufgaben in die Postfächer, Dateien in OneDrive und die SharePoint-Bibliotheken. Standard ist der ursprüngliche Ort; was dort schon liegt, bleibt unverändert. Ohne Microsoft 365 holt --export dieselben Inhalte als Dateien (Kapitel 18, „Exportieren“).
19.1 Restore-App in Entra ID#
Die App der Sicherung darf nur lesen. Zum Zurückschreiben braucht es eine zweite App-Registrierung mit Schreibrechten; so kann ein Sicherungslauf nie etwas im Tenant ändern. Fehlt sie, lehnt --to-tenant mit einem Satz ab, der sagt, was fehlt.
- Im Entra-Admin-Center eine weitere App registrieren (nur dieser Tenant), z. B. „AegisGrid Restore“.
- Unter API-Berechtigungen die Anwendungsberechtigungen von Microsoft Graph hinzufügen und die Administratorzustimmung erteilen:
Mail.ReadWrite,Calendars.ReadWrite,Contacts.ReadWrite,Tasks.ReadWrite.All,Files.ReadWrite.All,Sites.ReadWrite.All– nur die für die zurückzuschreibenden Bereiche nötigen. - Ein eigenes Zertifikat erzeugen und die
.crt-Datei unter Zertifikate & Geheimnisse hochladen (wie bei der Sicherung). - Die Anwendungs-ID der neuen App im Abschnitt des Jobs in
bkp_m365.cfgeintragen:
Die Restore-App im Job (der Tenant ist derselbe)
[m365-contoso]
tenant=contoso.onmicrosoft.com
client-id=00000000-0000-0000-0000-000000000000 # Sicherung (nur lesend)
client-cert=/etc/bkp/m365-contoso.pem
restore-client-id=11111111-1111-1111-1111-111111111111 # Restore-App (schreibend)
restore-cert=/etc/bkp/m365-contoso-restore.pem # oder restore-secret=file:/etc/bkp/m365-restore.secret
...
restore-client-id muss eine andere App sein als client-id. Statt des Zertifikats geht restore-secret= (file:<pfad> oder kms: wie bei api-key); restore-key= nennt den privaten Schlüssel, wenn er nicht in der Datei von restore-cert steht. Lehnt Microsoft 365 eine Änderung ab, nennt die Meldung das fehlende Recht.
Tipp: Wie bei der Sicherung lässt sich die Restore-App eingrenzen: in Exchange Online mit RBAC for Applications auf bestimmte Postfächer, in SharePoint mit Sites.Selected (Recht write) statt Sites.ReadWrite.All. Wer die App nur für einen Notfall braucht, kann ihr Zertifikat bis dahin sicher verwahren.
19.2 Zurückschreiben#
Erst prüfen, dann zurückschreiben
bkp_m365_restore --name m365-contoso --list
bkp_m365_restore --name m365-contoso --browse alice@contoso.com/onedrive --json
bkp_m365_restore --name m365-contoso --to-tenant --user alice@contoso.com --section mail --folder 'Inbox*' --dry-run
bkp_m365_restore --name m365-contoso --to-tenant --user alice@contoso.com --section mail --folder 'Inbox*'
bkp_m365_restore --name m365-contoso --run <lauf> --to-tenant --item-file /tmp/ids.txt --into-folder "Wiederhergestellt"
Gewählt wird wie beim Export: --run (Standard der neueste Lauf), --user, --site, --section, --folder, --path, --from und --to, oder genau bestimmte Ordner und Elemente mit --item <id> bzw. --item-file <datei> (die ids zeigt --browse --json; ein Ordner nimmt alles darunter mit). --dry-run schreibt nichts und zählt, was ein Restore täte.
| Option | Wirkung |
|---|---|
--to-user <upn> | in das Postfach bzw. OneDrive dieses Benutzers statt des ursprünglichen |
--to-site <url> | SharePoint-Bibliotheken in diese Website statt der ursprünglichen |
--into-folder <name> | alles unter einen neuen obersten Ordner dieses Namens, darunter die ursprüngliche Struktur (Termine und Aufgaben: ein Kalender bzw. eine Liste dieses Namens) |
--conflict skip | Standard: ein vorhandenes Element bleibt, wie es ist |
--conflict copy | zusätzlich anlegen; Dateien heißen dann „Name (restored <Datum>).ext“ |
--conflict overwrite | Mails, Termine, Kontakte und Aufgaben werden ersetzt (das alte erst gelöscht, wenn das neue vollständig ist), Dateien bekommen eine neue Version |
--with-attendees | Termine laden ihre Teilnehmer wieder ein |
--json | das Ergebnis als JSON auf stdout (Zähler, Fehler mit Grund, Hinweise) |
Vorhandenes wird so erkannt: Mails an der Internet-Message-ID im Zielordner, Termine an ihrer iCalUId (auch nach einem früheren Restore), Kontakte an Name und erster Mailadresse, Aufgaben an Titel und Fälligkeit, Dateien am Pfad. Vorhandene Ordner werden immer zusammengeführt.
19.3 Was zurückkommt#
- Mails mit Gelesen-Status, Empfangs- und Sendezeit als empfangene Mails (keine Entwürfe), Anhänge jeder Größe; fehlende Ordner werden nach Pfad angelegt.
- Termine einzeln und als Serie in ihrer Zeitzone; geänderte und gelöschte Einzeltermine einer Serie werden nachgezogen, Anhänge kommen mit. Standard ist ohne Einladungen: Organisator und Teilnehmer stehen oben im Text des Termins, niemand bekommt eine Mail. Erst mit
--with-attendeesgehen Einladungen hinaus. - Kontakte mit Foto, in ihren Kontaktordnern; Aufgaben in ihren To-Do-Listen. Fehlende Kalender, Ordner und Listen werden angelegt.
- Dateien in OneDrive und SharePoint mit Ordnerstruktur und Änderungszeit; große Dateien in Teilen. Eine Bibliothek geht in die gleiche Bibliothek der Website, sonst in eine gleichnamige, sonst in einen Ordner ihres Namens in der Standardbibliothek.
Hinweis: Freigabelinks und Berechtigungen von Dateien werden nicht wiederhergestellt. Wer eine Datei geteilt hatte, teilt sie nach dem Restore erneut. Ein Termin, dessen Anhang nicht zurückging, wird wieder entfernt und als Fehler gemeldet; Elementanhänge (eine Mail im Termin) und Verweise auf Dateien lassen sich nicht zurückschreiben.
19.4 Ergebnis und Exitcodes#
Am Ende steht je Art, wie viele Elemente zurückgeschrieben, übersprungen und fehlgeschlagen sind; jeder Fehler mit Pfad und verständlichem Grund. Ein einzelner Fehler bricht den Restore nicht ab.
| Exitcode | Bedeutung |
|---|---|
| 0 | alles zurückgeschrieben oder als vorhanden übersprungen |
| 3 | teilweise: einzelne Elemente scheiterten (jedes im Log und im Ergebnis); beim Export: einzelne Elemente nicht exportiert |
| 1 | nichts zurückgeschrieben (Anmeldung, Restore-App, Ziel, Auswahl) |
| 4 | --browse: Lauf, Quelle, Bereich oder Ordner gibt es nicht |
19.5 In der Verwaltungskonsole#
Bei einem Microsoft-365-Job eines Linux-Schedulers öffnet „Job“ › „Microsoft 365 wiederherstellen…“ den Dialog dazu (Token mit der Rolle admin; nennt allowed-commands= im Abschnitt [api] von bkp_sched.cfg m365-restore nicht, sagt der Dialog das beim Start).
- Sicherung: die Läufe, neueste zuerst; unvollständige sind gekennzeichnet.
- Benutzer oder Website und darunter im Baum „Was wiederherstellen“: die Bereiche mit ihren Ordnern, Kalendern, Listen und Bibliotheken. Ein angekreuzter Ordner bringt alles darin zurück; OneDrive und Bibliotheken zeigen ihre Ordner beim Aufklappen.
- Zurück nach Microsoft 365 mit „In einen anderen Benutzer“ bzw. „In eine andere Website“, „In einen eigenen Ordner“ (Vorgabe „Wiederhergestellt <Datum>“), der Regel für vorhandene Elemente, Einladungen und „Nur prüfen“. „Überschreiben“ fragt vorher nach.
- Als Dateien auf dem Client speichern: ein Ordner auf dem Rechner des Schedulers, Standarddateien (
.eml,.ics,.vcfund die Dateien selbst) oder JSON.
„Wiederherstellen“ legt den Job <name>-restore an und startet ihn; das Protokoll öffnet sich. Ergebnis und Verlauf stehen wie bei jedem Job in der Laufliste, „Teilweise“ mit den Elementen, die scheiterten.