Поиск по сайту:

Перенос домашних дисков пользователей в OneDrive для бизнеса с помощью PowerShell


Мы используем Office 365 почти 3 года, и одна из задач в моем списке дел была миграция пользовательских домашних папок в OneDrive for Business. Я пробовал это сделать в прошлом году, прося всех скопировать или переместить файлы сами, но это не сработало, как планировалось.

Итак, на этот раз мне пришлось изменить тактику, явно пользователи (более 150 человек) не собирались перемещать файлы самостоятельно. Теперь я знаю, что OneDrive имеет возможность перемещать Известные Папки (Рабочий стол, Документы и Изображения), но это не личные файлы, которые хранятся на файловом сервере. Поэтому для перемещения файлов мы будем использовать PowerShell.

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

Подготовка к перемещению домашней папки

Перед тем как мы сможем переместить файлы, нам нужно подготовить некоторые вещи. Есть некоторые настройки GPO, которые мы можем настроить, нужно проверить настройки администратора OneDrive, мы должны проинформировать наших пользователей, и нам нужно развернуть скрипт.

Еще одной потенциальной проблемой являются недопустимые имена файлов или слишком длинные пути. Точно так же, как SharePoint имеет OneDrive для бизнеса, существуют некоторые ограничения по файлам:

  • Недопустимые имена файлов или папок
  • Неверные символы ( ” * : < > ?/\ |)
  • Максимальный размер файла 15 ГБ
  • Ограничение по пути в 400 символов

Прочитайте полный список ограничений здесь.

Проверка центра администрирования OneDrive для бизнеса

Всегда полезно проверять Центр администрирования Office 365 перед выполнением подобных миграций. Новые настройки добавляются регулярно, и вы можете захотеть ограничить, например, параметры совместного использования для OneDrive для бизнеса.

Убедитесь, что настройки соответствуют политике безопасности вашей компании.

Перемещение известных папок OneDrive для бизнеса

Перемещение известных папок (Рабочий стол, Документы и Изображения) в OneDrive действительно стоит включить. Для этого потребуется всего две настройки групповой политики, и оно будет развернуто самостоятельно. Ваши пользователи могут работать и хранить файлы так, как привыкли, но они безопасно сохраняются в облаке.

Когда мы переходим от полноценной Citrix-среды к самостоятельной, одной из моих забот было сохранить данные пользователей в безопасности. Конечно, они хранят рабочие файлы на сетевых дисках и теперь на SharePoint. Но мы все знаем, что пользователи любят хранить рабочие файлы на своем рабочем столе или могут неосознанно сохранять их в папке документов.

И да, нам нужно обучать наших пользователей, но, создав известные папки, у нас будет одна проблема меньше.

Получите свой идентификатор арендатора Office 365

Перед тем как мы сможем настроить политики групп (GPO), нам нужно получить идентификатор нашего арендатора. С помощью PowerShell мы можем получить его всего с одной команды:

Connect to the Azure AD
connect-azuread

result:
Account                Environment Tenant
-------                ----------- ------
johndoe@a-d.site   AzureCloud  <your tenant ID>

Optional - Get your tenant details
get-azureadtenantdetail

После успешного подключения к Azure AD вы получите идентификатор арендатора в результатах. Если вы этого не получите, вы всегда можете использовать командлет Get-AzureAdTenantDetail, где objectid - это ваш идентификатор арендатора.

Настройка GPO

Существует несколько объектов групповой политики (GPO), которые необходимо настроить. Имейте в виду, что если вы включите этот GPO для всей вашей организации одновременно, это приведет к резкому увеличению сетевого трафика из-за синхронизации OneDrive. Поэтому вам может понадобиться использовать временную группу безопасности для назначения GPO.

Создайте новый GPO и перейдите к следующим политикам:

Computer configuration\Policies\Administrative Templates\OneDrive

Если вы не можете найти группы политик OneDrive, то вам, возможно, нужно сначала скопировать файлы adml и admx:

  1. Скопируйте файлы .adml и .admx из %localappdata%\Microsoft\OneDrive\BuildNumber\adm\ на рабочую станцию
  2. Вставьте .admx в центральное хранилище контроллера домена: \домен\sysvol\домен\Policies\PolicyDefinitions
  3. Скопируйте .adml в папку с правильным языком в центральном хранилище

Если вы ещё этого не сделали, сначала включите политику Безмолвно настраивать OneDrive с использованием основного аккаунта Windows. Это сэкономит пользователю дополнительный вход, когда они настраивают OneDrive в первый раз.

Также убедитесь, что вы ограничили ширину канала загрузки, таким образом один пользователь не сможет замедлить все интернет-соединение. Установите политику Установите максимальный процент ширины канала загрузки, который использует OneDrive.exe на что-то вроде 70.

Чтобы переместить известную папку, включите политику "Тихо перенаправить известную папку Windows в OneDrive" и введите идентификатор арендатора. Вы можете включить уведомление для пользователя, если хотите.

Также рекомендуется включить политику Запрашивать у пользователя перемещение известных папок Windows в OneDrive для поддержки любых устаревших клиентов OneDrive.

Перемещение домашней папки пользователя

Последний шаг, и это то, что мы планировали сделать, - переместить данные домашней папки пользователя в его учетную запись OneDrive for Business. В моем случае это файлы, хранящиеся на файловых серверах. Таким образом, у каждого пользователя есть сетевой диск, подключенный к их папке.

Несколько вещей, которые нам нужно решить в нашем скрипте PowerShell, это найти папку OneDrive пользователей, проверить, подключена ли она, и оставить указание в домашней папке, чтобы мы знали, что она скопирована. Мы не будем перемещать файлы, только копировать их. Я планирую переместить файлы на наш архивный сервер позже, чтобы у нас всегда была резервная копия.

PowerShell и OneDrive

Чтобы проверить, подключен ли OneDrive, нам нужно импортировать файл DLL, чтобы прочитать статус OneDrive. Скачайте OneDriveLib.dll из этого репозитория на GitHub. Поместите его в место, к которому могут получить доступ все пользователи. Я рекомендую использовать netlogon, но также подойдет и любая другая сетевая папка.

Сначала мы импортируем файл DLL:

Import-Module \\contoso.local\netlogon\OnedriveLib.dll

Далее нам нужно получить путь к папке OneDrive пользователя. По умолчанию это папка профиля пользователя. Если у вас несколько папок OneDrive, вы можете использовать переменную USERPROFILE, в противном случае я бы порекомендовал использовать переменную OneDriveCommercial.

#Find OneDrive folder
$path = $env:OneDriveCommercial

Alternative:
$path = $env:USERPROFILE + '\OneDrive - LazyAdmin'

Чтобы проверить, есть ли у нас правильная папка и подключен ли OneDrive, мы можем получить статус OneDrive:

#Get OneDrive status
$ODStatus = Get-ODStatus -ByPath $path

or in short:
$ODStatus = Get-ODStatus -ByPath $env:OneDriveCommercial

Если оно подключено, то вернётся либо 'UpToDate', либо 'Syncing'. Поэтому мы проверяем результат и используем robocopy для копирования файлов.

if ($ODStatus -eq 'UpToDate' -or $ODStatus -eq 'Syncing') {
    #OneDrive is connected
    write-host 'OneDrive connected and found'
    robocopy $env:HOMESHARE $env:OneDriveCommercial /E /SEC
    new-item $env:HOMESHARE -name '_FILES COPIED TO ONEDRIVE.txt' -ItemType 'file' -Value 'Files Copied'
}

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

Заключение

Запустите PowerShell в контексте вошедшего пользователя, для этого вы можете использовать PDQ Deploy, GPO (скрипт входа) или SCCM. Если у вас много пользователей, убедитесь, что вы распределяете развертывание, чтобы ограничить влияние на вашу сеть.

С помощью PowerShell убедитесь, что вы проверяете доступные переменные окружения. В своей первой попытке создать этот скрипт я попытался использовать букву диска домашней папки пользователя. Это не сработало. Ища альтернативу, я заметил, что мы можем использовать $env:HomeDrive, который вернет букву диска, или $env:HomeShare, который вернет фактический путь.