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

Приложение ShareGate поддерживает миграцию содержимого и преобразование содержимого, используя следующую процедуру: Приложение ShareGate поддерживает миграцию содержимого и преобразование содержимого.

Согласно статье, «Вы не можете экспортировать файл метаданных с помощью PowerShell. Его можно создать в приложении, а затем импортировать в сценарий PowerShell».

Однако, сравнивая файл Excel, созданный с помощью опции «Экспорт» приложения ShareGate, с файлом, созданным командой Export-List PowerShell, я вижу очень похожую структуру. Основное различие заключается в том, что приложение SG «знает» о целевом сайте и:

  • сопоставляет имена пользователей с целевым арендатором
  • использует имена столбцов из целевого сайта

Export-List просто экспортирует содержимое списка, используя domainalias в полях пользователей и имена столбцов с исходного сайта.

Почему тогда предупреждение?

По словам Николаса из группы поддержки Sharegate, рекомендация не использовать загруженный Excel в основном применяется при использовании фактически загруженного содержимого; например, при экспорте библиотеки Documents в файловый ресурс и импорте из этого файлового ресурса в SharePoint с помощью созданного файла Excel:

По умолчанию путь к источнику в этом файле Excel будет показывать «Documents/» в начале пути к файлу, а также иметь версию файла в имени файла.

Это происходит потому, что мы указываем путь к загруженному файлу; файлы загружаются в новую папку Documents, а номер их версии добавляется к имени файла, чтобы различать каждую версию файла. Если вы переносите элементы списка, то этого не произойдет, но будет колонка для вложений.

Однако если ваши файлы все еще находятся на исходном сайте, вы можете подключиться к исходному и целевому сайтам как обычно, а затем использовать файл excel из списка Export-list в строке Copy-Content. Ожидаемое поведение здесь заключается в том, что файлы с исходного сайта будут перенесены на целевой, но с метаданными из файла excel.

Для элементов списка я протестировал этот метод, и он сработал без изменений.
Для документов потребуется модификация исходного пути в файле excel. Удаление «Documents/» в начале и номера версии файла из столбца SourcePath было достаточным в моих тестах, поскольку в источнике ничего не изменилось.

Это действительно отличная новость! =)

Перенос списков SP с помощью ShareGate PowerShell

У меня есть четыре списка SharePoint, которые необходимо перенести с историей версий, авторами и временными метками. Три из этих списков требуют преобразования содержимого.

Я хочу не только протестировать (и повторно протестировать) процесс миграции до дня «D», но и скопировать содержимое в дополнительные среды (Dev, UAT). Выполнение всех этих задач вручную не представляется возможным.

Извлечение, преобразование, загрузка

К счастью, я могу использовать команду Export-Excel для экспорта содержимого списка и использования его в качестве файла, поддерживающего процесс миграции.
Команда Copy-Content использует -SourceList и -DestinationList для выполнения миграции, а файл, на который ссылается -ExcelFilePath, только предоставляет дополнительные метаданные. Или, в моем случае, обновленные метаданные.

Извлечение

Я использую команду Export-Excel для экспорта содержимого списка. Параметр -Name принимает несколько имен списков, а также работает с подстановочными знаками. Отлично!

$listNames =  Requests,Portfolio,Schedule,Archive
Export-List -SourceSite $srcSite -Name $listNames -DestinationFolder $currentLocation -NoVersionHistory:$noVersionHistory
Вход в полноэкранный режим Выйти из полноэкранного режима

Одним из преимуществ использования этой команды является то, что результирующий Excel отражает содержимое и структуру исходного списка — это означает, что его можно повторно использовать в различных «последующих» средах.

Преобразование

Данные в каждом из созданных файлов Excel должны быть обновлены, чтобы исправить значения или создать новые столбцы с вычисленными значениями.
Я использую модуль Import-Excel, который очень удобно импортирует содержимое Excel в PSObject[] и позволяет легко манипулировать им.

Если вы еще не использовали модуль Import-Excel, загляните в репозиторий ImportExcel на GitHub, который содержит более 100 примеров для начала работы.

# $worksheetName = 'Data',
$data = Import-Excel $sourceFilePath -WorkSheet $worksheetName
$data = Set-Dates -data $data
$data   | Export-Excel $targetFilePath -WorkSheet $worksheetName -ClearSheet
Вход в полноэкранный режим Выход из полноэкранного режима

Важно: Обязательно ознакомьтесь с разделом Соображения в статье Экспорт метаданных, импорт и копирование с помощью Excel или CSV. Например, если вы измените значения в столбце SourcePath, ID или Version, инструмент миграции не сможет правильно идентифицировать ваши элементы во время импорта.

Загрузка

Как и при использовании приложения ShareGate, необходимо предоставить файлы отображения.
Сопоставление типов содержимого» и «сопоставление пользователей» достаточно просты — их можно экспортировать из приложения ShareGate и повторно использовать в PowerShell «как есть».
Сопоставление свойств» более интересно; в отличие от приложения ShareGate, команда Copy-Content принимает только один файл сопоставления для сопоставления свойств, который должен обрабатывать оба источника: сайт SharePoint и файл Excel.
И снова вмешался Николас из службы поддержки Sharegate:

Поскольку нас интересует только сопоставление свойств, исходный список необходим с операцией Copy content, чтобы мы могли сравнить столбцы из обоих списков, а вы могли связать их так, как вам хотелось бы. Поскольку будет использоваться CSV-файл экспортированных метаданных, вы правы, что метаданные из CSV будут использоваться, но вы можете применить сопоставления свойств поверх них.

Технически, если у вас есть CSV-файл с экспортированными метаданными, необходимые изменения могут быть сделаны в CSV-файле и импортированы без сопоставления свойств. Эта опция всегда доступна и будет иметь приоритет перед отображениями свойств.

При выполнении преобразования содержимого я создаю новые столбцы для хранения обновленных значений, поскольку это позволяет мне проводить тесты для обеспечения достоверности данных.
По этой причине мой файл «отображения свойств» ссылается на оба источника. Чтобы облегчить себе жизнь, я экспортировал файл отображения из ShareGate и обновил только определенные отображения свойств:

    <Mapping IsKey="false">
      <SourceProperties>
        <Property InternalName="RoomFrom_Excel" Title="RoomFrom_Excel" />
      </SourceProperties>
      <DestinationProperty InternalName="Room From" Title="Room From" />
    </Mapping>
    <Mapping IsKey="false">
      <SourceProperties>
        <Property InternalName="Setup" Title="Setup" />
      </SourceProperties>
      <DestinationProperty InternalName="Setup" Title="Setup" />
    </Mapping>
Войти в полноэкранный режим Выйти из полноэкранного режима

И последнее, но не менее важное: команда Copy-Command требует шаблона свойств, определяющего общую конфигурацию: например, должны ли переноситься разрешения или версии. Этот шаблон вызвал у меня некоторые проблемы; после его экспорта из приложения ShareGate я не мог повторно использовать его в PowerShell при работе с другим сайтом. Вместо того чтобы тратить время на устранение неполадок, я создаю его в PowerShell с помощью New-PropertyTemplate

$propertyTemplate = New-PropertyTemplate -AuthorsAndTimestamps -VersionHistory
$mappingSettings = New-MappingSettings
$mappingSettings = Import-ContentTypeMapping -Path $contentTypeMappingFile
$mappingSettings = Import-PropertyMapping -Path $propertyMappingFile  -MappingSettings $mappingSettings
$mappingSettings = Import-UserAndGroupMapping -Path $userMappingFile -MappingSettings $mappingSettings
$copysettings = New-CopySettings -OnContentItemExists IncrementalUpdate

$result = Copy-Content  -SourceList $srcList -DestinationList $dstList  `
                        -ExcelFilePath "$excelFile"  `
                        -Template $propertyTemplate `
                        -MappingSettings $mappingSettings  -CopySettings $copysettings  `
                        -TaskName "$srcListName to $dstListName ($buildId)" `
                        -InsaneMode -WaitForImportCompletion -WhatIf:$WhatIf
Export-Report -CopyResult $result -Path "$resultsFile"
Вход в полноэкранный режим Выйти из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий