Share via


Gewusst wie: Programmgesteuertes Wiederherstellen von Inhalten

Letzte Änderung: Donnerstag, 4. November 2010

Gilt für: SharePoint Foundation 2010

In diesem Thema wird erklärt, wie Sie eine Anwendung erstellen, mit der eine SharePoint Foundation-Inhaltskomponente von einer Sicherung wiederhergestellt wird. Es wird davon ausgegangen, dass Sie mit den beiden Themen Übersicht über das Sichern und Wiederherstellen von Daten in SharePoint Foundation und Programmieren mit dem Sicherungs-/Wiederherstellungsobjektmodell von SharePoint Foundation vertraut sind.

So stellen Sie eine Inhaltskomponente wieder her

  1. Fügen Sie Ihrem Visual Studio-Projekt einen Verweis auf Microsoft.SharePoint sowie using-Anweisungen für die Namespaces Microsoft.SharePoint.Administration und Microsoft.SharePoint.Administration.Backup Ihrer Codedatei hinzu.

  2. Erstellen Sie innerhalb der Main-Methode ein SPRestoreSettings-Objekt, indem Sie die statische GetRestoreSettings-Methode verwenden. Übergeben Sie für den ersten Parameter den Pfad, unter dem die Sicherung gespeichert ist. Übergeben Sie für den zweiten Parameter eine Zeichenfolgenversion eines der Werte von SPRestoreMethodType.

    SPRestoreSettings settings = SPBackupRestoreSettings.GetRestoreSettings((@"\\Server\WSSBackups", "Overwrite");
    
    Dim settings As SPRestoreSettings = SPBackupRestoreSettings.GetRestoreSettings(("\\Server\WSSBackups", "Overwrite")
    
  3. Fordern Sie den Benutzer auf, die Inhaltskomponente anzugeben, die wiederhergestellt werden soll, und ordnen Sie deren Namen der IndividualItem-Eigenschaft zu. Zum Anzeigen einer Einzelauflistung der Namen der Komponenten Ihrer Farm, die in der letzten vollständigen Sicherung enthalten waren und die Objekte von Wiederherstellungsvorgängen sein können, führen Sie den Befehl stsadm -o restore -showtree in der Befehlszeile des Servers aus. Wenn Sie ein anderes vollständiges Sicherungspaket angeben möchten, verwenden Sie den -backupid-Parameter. Alternativ dazu können Sie in der Anwendung für die Zentraladministration zu Vorgänge > Wiederherstellung ausführen gehen. Wenn Sie die gesamte Farm angeben möchten, verwenden Sie "Farm" als Namen. (Wenn Sie die Eigenschaft auf null festlegen, wird auch die gesamte Farm zur Wiederherstellung ausgewählt, wobei davon ausgegangen wird, dass Sie IndividualItem im gesamten nachfolgenden Code zur namentlichen Angabe der wiederherzustellenden Komponente verwenden. Ein Beispiel für die Verwendung der FindItems()-Methode sehen Sie in Schritt 9.)

    Console.Write("Enter name of component to restore (default is whole farm):");
    settings.IndividualItem = Console.ReadLine();
    
    Console.Write("Enter name of component to restore (default is whole farm):")
    settings.IndividualItem = Console.ReadLine()
    
  4. Wenn Sie eine Wiederherstellung von einer anderen als der jüngsten Sicherung durchführen möchten, geben Sie das Sicherungspaket an, indem Sie dessen GUID der BackupId-Eigenschaft zuordnen. Ein Datensatz für jeden Sicherungsvorgang für einen bestimmten Sicherungsspeicherort wird in der Datei spbrtoc.xml im Stammverzeichnis des Speicherorts gespeichert. Jeder Sicherungs- und Wiederherstellungsvorgang wird in der Datei durch ein <SPHistoryObject>-Element dargestellt. Handelt es sich um eine Sicherung, ist das untergeordnete Element <IsBackup> des <SPHistoryObject>-Elements "True". Das <SPId>-Element des <SPHistoryObject>-Elements enthält die GUID der Sicherung.

    HinweisHinweis

    Zum programmgesteuerten Abrufen der Liste aller Sicherungs- und Wiederherstellungsvorgänge verwenden Sie die GetHistory()-Methode. Diese gibt ein SPBackupRestoreHistoryList-Objekt zurück, das SPBackupRestoreHistoryObject-Objekte enthält. Jedes der letzteren Objekte stellt einen Vorgang dar, und seine GUID ist jeweils in der SelfId-Eigenschaft gespeichert.

    settings.BackupId = new Guid("GUID");
    
    settings.BackupId = New Guid("GUID")
    
  5. Optional können Sie die IsVerbose-Eigenschaft oder die UpdateProgress-Eigenschaft oder beide festlegen. (Einzelheiten zu diesen Eigenschaften finden Sie in den einschlägigen Referenzthemen.)

    settings.IsVerbose = true;
    settings.UpdateProgress = 10;
    
    settings.IsVerbose = True
    settings.UpdateProgress = 10
    
  6. Falls erforderlich, legen Sie die FarmAdminLoginName- und die FarmAdminLoginPassword()-Eigenschaft fest.

    settings.FarmAdminLoginName = "Bob";
    settings.FarmAdminPassword = "7*j2U";
    
    settings.FarmAdminLoginName = "Bob"
    settings.FarmAdminPassword = "7*j2U"
    
  7. Erstellen Sie den Wiederherstellungsvorgang mit der CreateBackupRestore()-Methode. (Ein Verlaufsobjekt für den Vorgang wird ebenfalls erstellt.)

    Guid restore = SPBackupRestoreConsole.CreateBackupRestore(settings);
    
    Dim restore As Guid = SPBackupRestoreConsole.CreateBackupRestore(settings)
    
  8. Wenn die Benutzer auf der Benutzeroberfläche einen Komponentennamen eingeben müssen, anstatt ihn aus einer Liste auszuwählen, müssen Sie sicherstellen, dass der eingegebene Name exakt mit einer Komponente übereinstimmt. Fügen Sie der Main-Methode die folgende Zeile hinzu.

    SPBackupRestoreObject node = EnsureUniqueValidComponentName(settings, ref restore);
    
    Dim node As SPBackupRestoreObject = EnsureUniqueValidComponentName(settings, restore)
    
  9. Fügen Sie die folgende Implementierung der EnsureUniqueValidComponentName-Methode hinzu. Rufen Sie mithilfe der FindItems()-Methode eine Auflistung von Inhaltsobjekten ab, deren Namen dem vom Benutzer eingegebenen Namen entsprechen können. Wird kein übereinstimmender Name gefunden, fordern Sie den Benutzer auf, den Namen erneut einzugeben. Werden mehrere Übereinstimmungen gefunden, fordern Sie den Benutzer auf, den Namen genauer anzugeben. Ist der vom Benutzer eingegebene Komponentenname gültig und eindeutig, rufen Sie einen Verweis auf das SPBackupRestoreObject-Objekt ab, das die Komponente darstellt, die der Benutzer wiederherstellen möchte.

    private static SPBackupRestoreObject EnsureUniqueValidComponentName(SPBackupRestoreSettings settings, ref Guid operationGUID)
    {
        SPBackupRestoreObjectCollection list = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem);
        SPBackupRestoreObject component = null;
    
        if (list.Count <= 0)
        {
            Console.WriteLine("There is no component with that name. Run again with a new name.");
            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
        else if (list.Count > 1)  // The component name specified is ambiguous. Prompt user to be more specific.
        {
            Console.WriteLine("More than one component matches the name you entered.");
            Console.WriteLine("Run again with one of the following:");
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine("\t{0}", list[i].ToString());
            }
            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
        else
        {
            component = list[0];
        }
    
        return component;
    
    }
    
    Private Shared Function EnsureUniqueValidComponentName(ByVal settings As SPBackupRestoreSettings, ByRef operationGUID As Guid) As SPBackupRestoreObject
        Dim list As SPBackupRestoreObjectCollection = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem)
        Dim component As SPBackupRestoreObject = Nothing
    
        If list.Count <= 0 Then
            Console.WriteLine("There is no component with that name. Run again with a new name.")
            Console.WriteLine("Press Enter to continue.")
            Console.ReadLine()
        ElseIf list.Count > 1 Then ' The component name specified is ambiguous. Prompt user to be more specific.
            Console.WriteLine("More than one component matches the name you entered.")
            Console.WriteLine("Run again with one of the following:")
            For i As Integer = 0 To list.Count - 1
                Console.WriteLine(vbTab & "{0}", list(i).ToString())
            Next i
            Console.WriteLine("Press Enter to continue.")
            Console.ReadLine()
        Else
            component = list(0)
        End If
    
        Return component
    
    End Function
    
  10. Erstellen Sie in der Main-Methode eine bedingte Struktur, die nur ausgeführt wird, wenn die EnsureUniqueValidComponentName-Methode einen gültigen Knoten zurückgegeben hat.

    if (node != null)
    {
        // TODO: Set the restore operation as the active operation
        // and run it.
    }
    
    If node IsNot Nothing Then
        ' TODO: Set the restore operation as the active operation
        ' and run it.
    End If
    
  11. Ersetzen Sie die "TODO"-Zeile im vorherigen Schritt durch den folgenden Code. Dadurch wird der Vorgang mit der SetActive()-Methode als aktiver Vorgang festgelegt und überprüft, ob er erfolgreich ausgeführt wurde. Tritt ein Fehler auf, was der Fall sein wird, wenn bereits ein anderer Sicherungs- oder Wiederherstellungsvorgang ausgeführt wird, legen Sie fest, dass der Fehler entsprechend auf der Benutzeroberfläche der Anwendung gemeldet wird.

    if (SPBackupRestoreConsole.SetActive(restore) == true)
    {
        // TODO: Run the operation. See next step.
    }
    else
    {
        // Report through your UI that another backup
        // or restore operation is underway. 
        Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.");
    }
    
    If SPBackupRestoreConsole.SetActive(restore) = True Then
        ' TODO: Run the operation. See next step.
    Else
        ' Report through your UI that another backup
        ' or restore operation is underway. 
        Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.")
    End If
    
  12. Führen Sie in dem Codezweig, der bei erfolgreicher Ausführung des SetActive()-Aufrufs ausgeführt wird, den Vorgang mit der Run()-Methode aus. Testen Sie, ob der Vorgang erfolgreich ausgeführt wird. Falls ein Fehler auftritt, legen Sie fest, dass der Fehler entsprechend auf der Benutzeroberfläche gemeldet wird. Der folgende Code ersetzt die "TODO"-Zeile im vorherigen Schritt.

    if (SPBackupRestoreConsole.Run(restore, node) == false)
    {
        // Report "error" through your UI.
        String error = SPBackupRestoreConsole.Get(restore).FailureMessage;
        Console.WriteLine(error);
    }
    
    If SPBackupRestoreConsole.Run(restore, node) = False Then
        ' Report "error" through your UI.
        Dim [error] As String = SPBackupRestoreConsole.Get(restore).FailureMessage
        Console.WriteLine([error])
    End If
    
  13. Bereinigen Sie die Wiederherstellung mithilfe der Remove()-Methode. Fügen Sie den folgenden Code direkt vor der schließenden Klammer ein, die Sie in Schritt 10 eingefügt haben.

    // Clean up the operation.
    SPBackupRestoreConsole.Remove(restore);
    
    Console.WriteLine("Restore attempt complete. Press Enter to continue.");
    Console.ReadLine();
    
    ' Clean up the operation.
    SPBackupRestoreConsole.Remove(restore)
    
    Console.WriteLine("Restore attempt complete. Press Enter to continue.")
    Console.ReadLine()
    

Beispiel

Mit dem folgenden Code wird veranschaulicht, wie Sie eine Wiederherstellung einer Inhaltskomponente programmieren. Ersetzen Sie den Platzhalter \\Server\WSSBackups durch den Pfad für den Speicherort der Sicherung. Die Laufzeit findet die jüngste Sicherung automatisch an diesem Speicherort.

using System;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Administration.Backup;

namespace MyCompany.SharePoint.Administration.Backup
{
    class Restore
    {
        static void Main(string[] args)
        {
            // Create the restore settings.
            SPRestoreSettings settings = SPBackupRestoreSettings.GetRestoreSettings(@"\\Server\WSSBackups", "Overwrite");

            // Identify the content component to restore.
            Console.Write("Enter name of component to restore (default is whole farm):");
            settings.IndividualItem = Console.ReadLine();
            
            // Set optional operation parameters.
            settings.IsVerbose = true;
            settings.UpdateProgress = 10;
            
            // Create the restore operation and return its ID.
            Guid restore = SPBackupRestoreConsole.CreateBackupRestore(settings);

            SPBackupRestoreObject node = EnsureUniqueValidComponentName(settings, ref restore);

            if (node != null)
            {
                // Set the restore as the active job and run it.
                if (SPBackupRestoreConsole.SetActive(restore) == true)
                {
                    if (SPBackupRestoreConsole.Run(restore, node) == false)
                    {
                        // Report "error" through your UI.
                        String error = SPBackupRestoreConsole.Get(restore).FailureMessage;
                        Console.WriteLine(error);
                    }
                }
                else
                {
                    // Report through your UI that another backup
                    // or restore operation is underway. 
                    Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.");
                }

                // Clean up the operation.
                SPBackupRestoreConsole.Remove(restore);

                Console.WriteLine("Restore attempt complete. Press Enter to continue.");
                Console.ReadLine();
            }
        }// end Main

        private static SPBackupRestoreObject EnsureUniqueValidComponentName(SPBackupRestoreSettings settings, ref Guid operationGUID)
        {
            SPBackupRestoreObjectCollection list = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem);
            SPBackupRestoreObject component = null;

            if (list.Count <= 0)
            {
                Console.WriteLine("There is no component with that name. Run again with a new name.");
                Console.WriteLine("Press Enter to continue.");
                Console.ReadLine();
            }
            else if (list.Count > 1)  // The component name specified is ambiguous. Prompt user to be more specific.
            {
                Console.WriteLine("More than one component matches the name you entered.");
                Console.WriteLine("Run again with one of the following:");
                for (int i = 0; i < list.Count; i++)
                {
                    Console.WriteLine("\t{0}", list[i].ToString());
                }
                Console.WriteLine("Press Enter to continue.");
                Console.ReadLine();
            }
            else
            {
                component = list[0];
            }

            return component;

        }// end EnsureUniqueValidComponentName

    }// end Restore class
}// end namespace
Imports System
Imports Microsoft.SharePoint.Administration
Imports Microsoft.SharePoint.Administration.Backup

Namespace MyCompany.SharePoint.Administration.Backup
    Friend Class Restore
        Shared Sub Main(ByVal args() As String)
            ' Create the restore settings.
            Dim settings As SPRestoreSettings = SPBackupRestoreSettings.GetRestoreSettings("\\Server\WSSBackups", "Overwrite")

            ' Identify the content component to restore.
            Console.Write("Enter name of component to restore (default is whole farm):")
            settings.IndividualItem = Console.ReadLine()

            ' Set optional operation parameters.
            settings.IsVerbose = True
            settings.UpdateProgress = 10

            ' Create the restore operation and return its ID.
            Dim restore As Guid = SPBackupRestoreConsole.CreateBackupRestore(settings)

            Dim node As SPBackupRestoreObject = EnsureUniqueValidComponentName(settings, restore)

            If node IsNot Nothing Then
                ' Set the restore as the active job and run it.
                If SPBackupRestoreConsole.SetActive(restore) = True Then
                    If SPBackupRestoreConsole.Run(restore, node) = False Then
                        ' Report "error" through your UI.
                        Dim [error] As String = SPBackupRestoreConsole.Get(restore).FailureMessage
                        Console.WriteLine([error])
                    End If
                Else
                    ' Report through your UI that another backup
                    ' or restore operation is underway. 
                    Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.")
                End If

                ' Clean up the operation.
                SPBackupRestoreConsole.Remove(restore)

                Console.WriteLine("Restore attempt complete. Press Enter to continue.")
                Console.ReadLine()
            End If
        End Sub ' end Main

        Private Shared Function EnsureUniqueValidComponentName(ByVal settings As SPBackupRestoreSettings, ByRef operationGUID As Guid) As SPBackupRestoreObject
            Dim list As SPBackupRestoreObjectCollection = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem)
            Dim component As SPBackupRestoreObject = Nothing

            If list.Count <= 0 Then
                Console.WriteLine("There is no component with that name. Run again with a new name.")
                Console.WriteLine("Press Enter to continue.")
                Console.ReadLine()
            ElseIf list.Count > 1 Then ' The component name specified is ambiguous. Prompt user to be more specific.
                Console.WriteLine("More than one component matches the name you entered.")
                Console.WriteLine("Run again with one of the following:")
                For i As Integer = 0 To list.Count - 1
                    Console.WriteLine(vbTab & "{0}", list(i).ToString())
                Next i
                Console.WriteLine("Press Enter to continue.")
                Console.ReadLine()
            Else
                component = list(0)
            End If

            Return component

        End Function ' end EnsureUniqueValidComponentName

    End Class ' end Restore class
End Namespace ' end namespace

Siehe auch

Aufgaben

Gewusst wie: Programmgesteuertes Sichern von Inhalten

Gewusst wie: Programmgesteuerte Sicherung und Wiederherstellung einer einzelnen Websitesammlung

Gewusst wie: Erstellen einer Inhaltsklasse, die gesichert und wiederhergestellt werden kann

Gewusst wie: Erweitern des Hilfsprogramms "stsadm"

Referenz

Microsoft.SharePoint.Administration.Backup

Backup

Restore

Konzepte

Programmieren mit dem Sicherungs-/Wiederherstellungsobjektmodell von SharePoint Foundation

Weitere Ressourcen

Befehlszeilentool "Stsadm.exe"