Partager via


Procédure : restaurer le contenu par programmation

Dernière modification : jeudi 4 novembre 2010

S’applique à : SharePoint Foundation 2010

Cette rubrique explique comment créer une application qui restaure un composant de contenu SharePoint Foundation à partir d'une sauvegarde. Cela suppose que vous connaissez les rubriques Vue d’ensemble de la sauvegarde et restauration des données dans SharePoint Foundation et Programmation avec le modèle objet de sauvegarde/restauration de SharePoint Foundation.

Pour restaurer un composant de contenu

  1. Ajoutez une référence à Microsoft.SharePoint dans votre projet Visual Studio et ajoutez des instructions using pour les espaces de noms Microsoft.SharePoint.Administration et Microsoft.SharePoint.Administration.Backup du fichier du code.

  2. Dans la méthode Main, créez un objet SPRestoreSettings en utilisant la méthode statique GetRestoreSettings. Pour le premier paramètre, indiquez le chemin où est stockée la sauvegarde. Pour le deuxième paramètre, spécifiez une version de chaîne d'une des valeurs de SPRestoreMethodType.

    SPRestoreSettings settings = SPBackupRestoreSettings.GetRestoreSettings((@"\\Server\WSSBackups", "Overwrite");
    
    Dim settings As SPRestoreSettings = SPBackupRestoreSettings.GetRestoreSettings(("\\Server\WSSBackups", "Overwrite")
    
  3. Demandez à l'utilisateur de spécifier le composant de contenu à restaurer et attribuez son nom à la propriété IndividualItem. Pour afficher une liste détaillée des noms des composants de votre batterie de serveurs qui étaient inclus dans la dernière sauvegarde complète et qui peuvent être les objets d'opérations de restauration, vous pouvez exécuter la commande stsadm -o restore -showtree au niveau de la ligne de commande du serveur. Pour spécifier un autre package de sauvegarde complète, utilisez le paramètre -backupid. Vous pouvez aussi consulter Opérations > Effectuer une restauration dans l'application Administration centrale. Pour spécifier la batterie de serveurs complète, utilisez le nom « Farm ». (Le fait de choisir la valeur null pour la propriété sélectionne également toute la batterie de serveurs pour la sauvegarde, du moins si vous utilisez IndividualItem dans le reste du code pour identifier par son nom le composant à restaurer. Vous trouverez un exemple d'utilisation de la méthode FindItems() dans l'étape 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. Si vous souhaitez effectuer la restauration à partir d'une autre sauvegarde que la plus récente, identifiez le package de sauvegarde en affectant son GUID à la propriété BackupId. Un enregistrement de chaque opération de sauvegarde pour un emplacement de sauvegarde particulier est stocké dans spbrtoc.xml à la racine de l'emplacement. Chaque opération de sauvegarde et de restauration est représentée dans le fichier par un élément <SPHistoryObject>. S'il s'agit d'une sauvegarde, l'enfant <IsBackup> de l'élément <SPHistoryObject> a la valeur « True ». L'élément <SPId> de l'élément <SPHistoryObject> contient le GUID de la sauvegarde.

    Notes

    Pour obtenir grâce à la programmation la liste de toutes les opérations de sauvegarde et de restauration, utilisez la méthode GetHistory(). Celle-ci renvoie un objet SPBackupRestoreHistoryList qui contient les objets SPBackupRestoreHistoryObject. Chacun de ces derniers représente une opération et stocke son GUID dans la propriété SelfId.

    settings.BackupId = new Guid("GUID");
    
    settings.BackupId = New Guid("GUID")
    
  5. Vous pouvez définir l'une ou l'autre des propriétés IsVerbose et UpdateProgress, ou les deux. (Pour plus d'informations sur ces propriétés, voir les rubriques qui les concernent.)

    settings.IsVerbose = true;
    settings.UpdateProgress = 10;
    
    settings.IsVerbose = True
    settings.UpdateProgress = 10
    
  6. Au besoin, définissez les propriétés FarmAdminLoginName et FarmAdminLoginPassword().

    settings.FarmAdminLoginName = "Bob";
    settings.FarmAdminPassword = "7*j2U";
    
    settings.FarmAdminLoginName = "Bob"
    settings.FarmAdminPassword = "7*j2U"
    
  7. Créez l'opération de restauration avec la méthode CreateBackupRestore(). (Un objet historique est également créé pour l'opération.)

    Guid restore = SPBackupRestoreConsole.CreateBackupRestore(settings);
    
    Dim restore As Guid = SPBackupRestoreConsole.CreateBackupRestore(settings)
    
  8. Si votre interface utilisateur comporte des utilisateurs, tapez un nom de composant au lieu d'en sélectionner un dans une liste ; vous devez être sûr que le nom entré correspond exactement à un composant. Ajoutez la ligne suivante à votre méthode Main.

    SPBackupRestoreObject node = EnsureUniqueValidComponentName(settings, ref restore);
    
    Dim node As SPBackupRestoreObject = EnsureUniqueValidComponentName(settings, restore)
    
  9. Ajoutez l'implémentation suivante de votre méthode EnsureUniqueValidComponentName. Utilisez la méthode FindItems() pour récupérer une collection d'objets de contenu dont le nom correspond au nom entré par l'utilisateur. S'il n'existe aucune correspondance, demandez à l'utilisateur de recommencer. S'il y en a plusieurs, invitez l'utilisateur à être plus précis. Si le nom du composant que l'utilisateur a entré est valide et sans ambiguïté, obtenez une référence à l'objet SPBackupRestoreObject qui représente le composant que l'utilisateur souhaite restaurer.

    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. Dans la méthode Main, créez une structure conditionnelle qui ne s'exécute que si votre méthode EnsureUniqueValidComponentName a renvoyé un nœud valide.

    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. Remplacez la ligne « TODO » de l'étape précédente par le code suivant. Cela définit l'opération comme étant l'opération active avec la méthode SetActive() et vérifie son succès. En cas d'échec, ce qui se produit si une autre opération de sauvegarde ou de restauration est déjà en cours d'exécution, une erreur est signalée sur l'interface utilisateur de votre application.

    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. Dans la branche de code qui s'exécute en cas de succès de l'appel SetActive(), l'opération est exécutée avec la méthode Run(). Vérifiez que l'opération réussit. En cas d'échec, un message signalant l'échec de l'opération s'affiche sur votre interface utilisateur. Le code suivant remplace la ligne « TODO » de l'étape précédente.

    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. Nettoyez la restauration avec la méthode Remove(). Ajoutez le code suivant juste avant l'accolade fermante que vous avez insérée à l'étape 10.

    // 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()
    

Exemple

Le code suivant indique comment programmer la restauration d'un composant de contenu. Remplacez l'espace réservé \\Server\WSSBackups par le chemin d'accès à l'emplacement de votre sauvegarde. L'exécutable y trouve automatiquement la sauvegarde la plus récente.

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

Voir aussi

Tâches

Pocédure : sauvegarder du contenu par programme

Procédure : sauvegarder et restaurer une seule collection de sites par programmation

Procédure : créer une classe de contenu qui peut être sauvegardée et restaurée

Procédure : étendre l'utilitaire STSADM

Référence

Microsoft.SharePoint.Administration.Backup

Backup

Restore

Concepts

Programmation avec le modèle objet de sauvegarde/restauration de SharePoint Foundation

Autres ressources

Outil en ligne de commande stsadm.exe