Migrer vers SharePoint à l’aide de PowerShell

Cet article traite des applets de commande PowerShell basées sur le moteur de migration de l’outil de migration SharePoint (SPMT). Ils peuvent être utilisés pour déplacer des fichiers à partir de bibliothèques de documents et d’éléments de liste SharePoint Server localement, ainsi que des partages de fichiers, vers Microsoft 365. Pour plus d’informations sur toutes les applets de commande PowerShell actuelles relatives à la migration SharePoint, consultez la référence des applets de commande de l’outil de migration Microsoft SharePoint.

Les cmdlets PowerShell offrent les mêmes fonctionnalités que l’outil de migration SharePoint.

Remarque

Ces applets de commande PowerShell ne sont actuellement pas disponibles pour les utilisateurs d’Office 365 géré par 21Vianet en Chine.

Configuration requise

Description Recommandation
UC Processeur 64 bits 4 cœurs ou supérieur
Mémoire RAM 16 Go
Stockage local Disque dur : 150 Go d’espace disponible
Système d’exploitation Windows Server 2025 Standard ou Datacenter
 :Windows Server 2022 Standard ou Datacenter
 :Windows Server 2019 Standard ou Datacenter
Windows Server 2016 Standard ou Datacenter
Windows Server 2012 R2 Standard ou Datacenter
Windows 10 ou 11 clients
.NET Framework 4.6.2
Redistributable Microsoft Visual C++ 2015 Requis pour la migration de OneNote

Importante

PowerShell 5.0x et .NET Framework 4.6.2 ou version ultérieure sont nécessaires pour prendre en charge la migration des chemins d’accès de fichiers jusqu’à 400 caractères.

Configuration minimale requise (exécution lente probable)

Description Spécification minimale
UC Processeur double cœur de 1,4 GHz et 64 bits minimum
Mémoire RAM 8 Go
Stockage local Disque dur : 150 Go d'espace disponible
Carte réseau Connexion Internet haut débit
Système d’exploitation Windows Server 2008 R2 ou 2012
Windows 7, 8 ou 8.1
.NET Framework 4.6.2
Redistributable Microsoft Visual C++ 2015 Requis pour la migration de OneNote.
PowerShell PowerShell 5.x requis pour prendre en charge la migration des chemins d’accès de fichiers jusqu’à 400 caractères. PowerShell 6.0 ou version ultérieure n’est pas pris en charge.

Solution de contournement du problème de chemin long

Lors de l’utilisation de SPMT PowerShell, vous risquez de rencontrer des échecs d’analyse sur les fichiers sources dont les chemins d’accès comportent plus de 260 caractères. Pour résoudre ce problème, vous pouvez modifier le Registre système afin d’autoriser PowerShell à lire les fichiers de chemin d’accès long.

Ouvrez l’éditeur du registre, accédez à "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework", ajoutez une nouvelle clé "AppContext". Ensuite, ajoutez 2 valeurs de chaîne sous la clé.

  • Nom de la valeur : Switch.System.IO.BlockLongPaths Données de la valeur : false

  • Nom de la valeur : Switch.System.IO.UseLegacyPathHandling Données de la valeur : false

Avant de commencer

  1. Approvisionnez votre Microsoft 365 avec votre Active Directory existant ou l’une des autres options d’ajout de comptes à Microsoft 365. Pour plus d’informations, voir Intégration de Microsoft 365 avec les environnements locaux et Ajouter des utilisateurs aux applications Microsoft 365 pour les PME.

  2. Ouvrez le dossier : $env:UserProfile\Documents\WindowsPowerShell\Modules\Microsoft.SharePoint.MigrationTool.PowerShell. Assurez-vous que des DLL sont à l’intérieur. Si vous utilisez OneDrive, vous devez copier le dossier WindowsPowershell dans $env:UserProfile\OneDrive - Microsoft\Documents.

  3. À partir de cet emplacement, exécutez la commande PowerShell suivante :

    Import-Module Microsoft.SharePoint.MigrationTool.PowerShell
    

Créer et initialiser une session de migration

Cette applet de commande crée puis initialise une session de migration. L’initialisation configure les paramètres de migration au niveau de la session. Si aucun paramètre de réglage spécifique n’est défini, les paramètres par défaut sont utilisés. Une fois qu’une session est inscrite, vous pouvez ajouter une tâche à la session et démarrer la migration.

Ajouter une tâche de migration

Utilisez cette applet de commande pour ajouter une nouvelle tâche de migration à la session de migration inscrite. Actuellement, trois types de tâches différents sont autorisés : tâche de partage de fichiers, tâche SharePoint et tâche définie par JSON.

Remarque : les tâches en double ne sont pas autorisées.

Supprimer une tâche

Utilisez cette cmdlet pour supprimer une tâche de migration existante de la migration enregistrée.

Démarrer la migration

Cette applet de commande démarre la migration SPMT inscrite.

Renvoyer l’objet de la session actuelle

Renvoie l’objet de la session active. Cette applet de commande inclut le status of current tasks and current session level settings. Le status actuel de la tâche inclut :

  • Nombre de fichiers analysés
  • Nombre de fichiers migrés
  • Les messages d’erreur de migration

Arrêter votre migration actuelle

Cette applet de commande annule la migration actuelle.

Afficher les détails de l’état votre migration dans la console

  • Show-SPMTMigration

Si vous démarrez la migration en mode NoShow, l’exécution de l’applet de commande Show-SPMTMigration affiche l’ID de tâche, l’emplacement de la source de données, l’emplacement cible et le status de migration dans la console. La sélection de Ctrl+C ramène l’affichage en mode NoShow .

Supprimer la session de migration

Utilisez cette cmdlet pour supprimer la session de migration.

Exemples de scénarios

Exemple 1 : L’administrateur informatique ajoute une tâche SharePoint locale et démarre la migration en arrière-plan.

#Define SharePoint 2013 data source#
$SourceSiteUrl = "http://YourOnPremSite/"
$OnPremUserName = "Yourcomputer\administrator"
$OnPremPassword = ConvertTo-SecureString -String "OnPremPassword" -AsPlainText -Force
$SPCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $OnPremUserName, $OnPremPassword
$SourceListName = "SourceListName"

#Define SharePoint target#
$SPOUrl = "https://contoso.sharepoint.com"
$UserName = "admin@contoso.onmicrosoft.com"
$PassWord = ConvertTo-SecureString -String "YourSPOPassword" -AsPlainText -Force
$SPOCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, $PassWord
$TargetListName = "TargetListName"

#Define File Share data source#
$FileshareSource = "YourFileShareDataSource"

#Import SPMT Migration Module#
Import-Module Microsoft.SharePoint.MigrationTool.PowerShell

#Register the SPMT session with SharePoint credentials#
Register-SPMTMigration -SPOCredential $SPOCredential -Force

#Add two tasks into the session. One is SharePoint migration task, and another is File Share migration task.#
Add-SPMTTask -SharePointSourceCredential $SPCredential -SharePointSourceSiteUrl $SourceSiteUrl  -TargetSiteUrl $SPOUrl -MigrateAll
Add-SPMTTask -FileShareSource $FileshareSource -TargetSiteUrl $SPOUrl -TargetList $TargetListName

#Start Migration in the console. #
Start-SPMTMigration

Exemple 2 : L’administrateur informatique souhaite mettre la migration de l’arrière-plan « Mode NoShow » au premier plan et exécuter l’applet de commande suivante afin que la progression de la migration soit affichée dans la console.

Show-SPMTMigration

Exemple 3 : Le Administration informatique souhaite effectuer une migration en bloc en chargeant un fichier .csv. L’exemple de fichier est ici SPMT.csv.

Load CSV;
$csvItems = import-csv "C:\spmt.csv" -Header c1,c2,c3,c4,c5,c6
ForEach ($item in $csvItems)
{
    Write-Host $item.c1
    Add-SPMTTask -FileShareSource $item.c1 -TargetSiteUrl $item.c4 -TargetList $item.c5 -TargetListRelativePath $item.c6
}

Deux tâches de migration sont définies dans le fichier spmt.csv.

D:\MigrationTest\Files\Average_1M\c,,,https://SPOSite.sharepoint.com,Documents,Test
C:\work\Powershell\negative,,,https://SPOSite.sharepoint.com/,Documents,DocLibrary_SubfolderName

Extraits de code pour la migration en bloc en chargeant un fichier JSON :

#Load JSON:
$jsonItems = Get-Content -Raw -Path  "C:\spmt.json" | ConvertFrom-Json
ForEach ($taskItem in $jsonItems.Tasks)
{
    $jsonString = ConvertTo-Json $taskItem -Depth 100
    Add-SPMTTask -JsonDefinition $jsonString -SharePointSourceCredential $onpremCredential
}

Trois tâches de migration sont définies dans le fichier spmt.json.

{
   "Tasks":[
      {
         "SourcePath":"http://On-prem/sites/test",
         "TargetPath":"https://YourSPO.sharepoint.com",
         "Items":{
            "Lists":[
               {
                  "SourceList":"list-01",
                  "TargetList":"list-01"
               }
            ],
            "SubSites":[

            ]
         }
      },
      {
         "SourcePath":"http://On-prem/sites/test",
         "TargetPath":"https://YourSPO.sharepoint.com",
         "Items":{
            "Lists":[
               {
                  "SourceList":"list-02",
                  "TargetList":"list-02"
               }
            ],
            "SubSites":[

            ]
         }
      },
      {
         "SourcePath":"http://On-prem/sites/test",
         "TargetPath":"https://YourSPO.sharepoint.com",
         "Items":{
            "Lists":[
               {
                  "SourceList":"doclib-01",
                  "TargetList":"doclib-01"
               }
            ],
            "SubSites":[

            ]
         }
      }
   ]
}

Exemple 4 : Afficher la progression de la migration

Ces exemples montrent comment afficher la progression de votre projet de migration. Get-SPMTMigration retourne l’objet de la session en cours Il inclut les tâches en cours status et les paramètres au niveau de la session actuelle.

L’état des tâches actuelles comprend :

  • Nombre de fichiers analysés.
  • Nombre de fichiers filtrés.
  • Nombre de fichiers migrés.
  • Nombre de fichiers ayant échoué.
  • Progression de la migration de la tâche en cours (0 ~ 100).
  • Le status actuel de la tâche.
  • Messages d’erreur de migration, le cas échéant.

# Start migration in the background
Start-SPMTMigration -NoShow

# Get the object of current migration
$session = Get-SPMTMigration

# Query migration status every 5 seconds until migration is finished
while ($session.Status -ne "Finished")
{
Write-Host $session.Status

    # Query migration progress of each tasks
    Foreach ($taskStatus in $session.StatusOfTasks)
    {
        $taskStatus.MigratingProgressPercentage
}

    Start-Sleep -Seconds 5
}