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

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

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

Примечание.

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

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

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

Важно!

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

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

Описание Минимальное требование
ЦП 64-разрядный двухъядерный процессор с частотой 1,4 ГГц (или более производительный)
ОЗУ 8 ГБ
Локальное хранилище Жесткий диск: 150 ГБ свободного места
Сетевая карта Высокоскоростное подключение к Интернету
Операционная система Windows Server 2008 R2
Windows 7
Windows 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 строковых значения под ключ.

  • Имя значения: Switch.System.IO.BlockLongPaths данные о значении: false

  • Имя значения: Switch.System.IO.UseLegacyPathHandling данные о значении: 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.

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

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

S — количество отсканированных файлов

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

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

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

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

При запуске миграции в режиме 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
}