Миграция на SharePoint с помощью PowerShell

В этой статье описаны командлеты PowerShell на основе модуля миграции средства миграции SharePoint (SPMT). Их можно использовать для перемещения файлов из локальных библиотек документов SharePoint Server, элементов списков и общих папок в Microsoft 365. Сведения обо всех текущих командлетах PowerShell, связанных с миграцией SharePoint, см. в справочнике по командлетам средства миграции Microsoft SharePoint.

Командлеты PowerShell имеют те же функциональные возможности, что и средство миграции SharePoint.

Примечание.

Эти командлеты PowerShell в настоящее время недоступны для пользователей Office 365, предоставляемого 21Vianet в Китае.

Требования к системе

Описание Рекомендация
ЦП 64-разрядный 4-ядерный процессор или лучше
ОЗУ 16 ГБ
Локальное хранилище Жесткий диск: 150 ГБ свободного места
Операционная система Windows Server 2025 Standard или DatacenterWindows
Server 2022 Standard или DatacenterWindows
Server 2019 Standard или Datacenter
Windows Server 2016 Standard или Datacenter
Windows Server 2012 R2 Standard или Datacenter
Windows 10 или 11 клиент
платформа .NET Framework 4.6.2
Распространяемый компонент Microsoft Visual C++ 2015 Требуется для переноса данных OneNote

Важно!

Для поддержки переноса путей к файлам длиной до 400 символов требуются PowerShell 5.0x и платформа .NET Framework 4.6.2 или более поздней версии.

Минимальные требования (низкая производительность)

Описание Минимальное требование
ЦП 64-разрядный двухъядерный процессор с частотой 1,4 ГГц (или более производительный)
ОЗУ 8 ГБ
Локальное хранилище Жесткий диск: 150 ГБ свободного места
Сетевая карта Высокоскоростное подключение к Интернету
Операционная система Windows Server 2008 R2 или 2012
Windows 7, 8 или 8.1
Платформа .NET Framework 4.6.2
Распространяемый компонент Microsoft Visual C++ 2015 Требуется для переноса данных OneNote.
PowerShell PowerShell 5.x требуется для поддержки переноса путей к файлам длиной до 400 символов. PowerShell 6.0 или более поздней версии не поддерживается.

Временное решение проблемы длинного пути

При использовании SPMT PowerShell могут возникать сбои сканирования исходных файлов с путями длиннее 260 символов. Чтобы устранить эту проблему, можно изменить системный реестр, чтобы разрешить PowerShell читать файлы с длинным путем.

Откройте редактор реестров, перейдите в "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework", добавьте новый ключ "AppContext". Затем добавьте 2 строковых значения под ключом.

  • Value Name: Switch.System.IO.BlockLongPaths Value Data: false

  • Value Name: Switch.System.IO.UseLegacyPathHandling Value Data: false

Подготовка к работе

  1. Подготовьте Microsoft 365 с помощью существующей версии Active Directory или с помощью одного из других вариантов добавления учетных записей в Microsoft 365. Дополнительные сведения см. в статьях "Интеграция Microsoft 365 с локальными средами" и "Добавление пользователей в приложения Microsoft 365 для бизнеса".

  2. Откройте папку: $env:UserProfile\Documents\WindowsPowerShell\Modules\Microsoft.SharePoint.MigrationTool.PowerShell. Убедитесь, что внутри него есть библиотеки DLL. Если вы используете OneDrive, вам нужно скопировать папку WindowsPowershell в $env:UserProfile\OneDrive - Microsoft\Documents.

  3. Из этого расположения запустите следующую команду PowerShell:

    Import-Module Microsoft.SharePoint.MigrationTool.PowerShell
    

Создание и инициализация сеанса миграции

Этот командлет создает и инициализирует сеанс миграции. Инициализация настраивает параметры миграции на уровне сеанса. Если параметры настройки не определены, используются настройки по умолчанию. После регистрации сеанса можно добавить в него задачу и начать миграцию.

Добавление задачи миграции

Используйте этот командлет, чтобы добавить новую задачу миграции в зарегистрированный сеанс миграции. В настоящее время разрешены три типа задач: задача "Общий доступ к файлу", "Задача SharePoint" и задача, определенная в формате JSON.

Примечание. Дублирование задач не допускается.

Удаление задачи

Используйте этот командлет для удаления существующей задачи миграции из зарегистрированного сеанса миграции.

Начало миграции

Этот командлет запускает миграцию зарегистрированного средства миграции SPMT.

Возврат объекта текущего сеанса

Возвращает объект текущего сеанса. Этот командлет содержит состояние текущих задач и параметры текущего сеанса. Текущее состояние задачи включает:

  • количество проверенных файлов;
  • количество перенесенных файлов;
  • возможные сообщения об ошибках миграции.

Остановка текущей миграции

Этот командлет отменяет текущую миграцию.

Отображение сведений о состоянии миграции в консоли

  • Show-SPMTMigration

Если вы начинаете миграцию в режиме NoShow , при запуске командлета Show-SPMTMigration в консоли отображаются идентификатор задачи, расположение источника данных, расположение целевого объекта и состояние миграции. При нажатии клавиш CTRL+C экран возвращается в режим NoShow .

Удаление сеанса миграции

Используйте этот командлет для удаления сеанса миграции.

Примеры сценариев

Пример 1. ИТ-администратор добавляет локальную задачу SharePoint и запускает миграцию в фоновом режиме.

#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

Пример 2. ИТ-администратор хочет перенести миграцию из фонового "режима NoShow" на передний план и запустить следующий командлет, чтобы ход выполнения миграции отображался на консоли.

Show-SPMTMigration

Пример 3. ИТ-Администратор хочет выполнить массовую миграцию, загрузив .csv файл. Как образец в этом примере используется файл 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
}

В файле 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

Фрагменты кода для массовой миграции путем загрузки одного 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
}

В файле 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":[

            ]
         }
      }
   ]
}

Пример 4. Отображение хода выполнения миграции

В этих примерах показано, как отобразить ход выполнения проекта миграции. Get-SPMTMigration возвращает объект текущего сеанса Он включает текущее состояние задач и параметры текущего сеанса.

Состояние текущих задач включает в себя следующее:

  • Количество проверенных файлов.
  • Количество отфильтрованных файлов.
  • Количество перенесенных файлов.
  • Количество неудачных файлов.
  • Ход выполнения миграции текущей задачи (0 ~ 100).
  • Текущее состояние задачи.
  • Сообщения об ошибках миграции (при их наличии).

# 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
}