Миграция файлового сервера (FS) средствами PowerShell

Начиная с Windows Server 2008, powershell настолько плотно входит в сферу администрирования серверов Windows (а также других продуктов Microsoft), что незнание этой оболочки автоматом возводит системного администратора в разряд дилетантов. К стыду своему, вынужден признаться, что до последнего времени имел об этом средстве автоматизации самое поверхностное представление. Хотя, меня несколько оправдывает факт, что непосредственно администрированием я не занимался уже несколько лет (примерно с тех пор как появился powershell). На новом месте работы, однако, навык его использования крайне полезен (если не необходим), так что осваиваю. И первой задачей, которую довелось решать — миграция файлового сервера.

Подробно о миграции написано на Microsoft Technet. Однако там много информации, я выдернул оттуда наиболее типовой вариант — миграция с одного сервера на другой сервер, не осложнённая технологиями и фичами типа DFS, BrunchCache и автономными файлами, и упорядочил его до нескольких скриптов.

Итак, исходные данные:

2 сервера Windows 2008 R2 ENU — исходный и сервер назначения.
Время на обоих синхронизировано, открыт 7000 порт (TCP/UDP) на файрволе (или он отключен).
Разрешён запуск скриптов powershell  ( Set-ExecutionPolicy Unrestricted -Force )
Исходный сервер:

скрипт FSMig-Prep.ps1 (подготовка — установка средств миграции, подключение надстройки)

Import-Module ServerManager
Add-WindowsFeature Migration
Add-PSSnapin Microsoft.Windows.ServerManager.Migration

скрипт FSMig-UGExport.ps1 (экспорт локальных пользователей и групп. Нужно передать в виде параметров локальный путь и пароль. Например FSMig-UGExport.ps1 c:\change Password1)

# $folder - папка, в которую выкладываются экспортные данные; $pass - пароль для шифрования этих данных
Param($folder,$pass)
# Создаём папку назначения.
Md $folder
# Расшариваем её для всех - чтение. "&" в начале, т.к. NET - не коммандлет powershell, а внешняя команда.
&net share Change=$folder /GRANT:Everyone`,Read
# Пароль надо преобразовать в шифрованную строку, для чего используюм переменную $SecStr. На неё впоследствии ссылается и следующий скрипт
$SecStr = ConvertTo-SecureString -AsPlainText -Force -String $pass
#Экспорт пользователей и групп. Отключенные пользователи (disabled) экспортированы не будут. Чтобы экспортировать всех, надо указать All вместо Enabled.
Export-SmigServerSetting -User Enabled -Group -Path $folder -Password $SecStr -Verbose

Скрипт FSMig-Send.ps1 (отправка данных. Нужно передать в виде параметров локальный путь, сервер назначения и локальный путь на сервере назначения.)

# $source - исходная директория файл-сервера
# $comp - имя сервера назначения
# $dest - путь на сервере назначения, куда сложить
Param($source,$comp,$dest)
Send-SmigServerData -Include All -ComputerName $comp -SourcePath $source -DestinationPath $dest -Recurse -Password $SecStr

Сервер назначения:

скрипт FSMig-Prep.ps1 (подготовка — установка средств миграции, подключение надстройки)

Import-Module ServerManager
Add-WindowsFeature Migration
Add-PSSnapin Microsoft.Windows.ServerManager.Migration

скрипт FSMig-Dest.ps1 (Импорт локальных пользователей и групп исходного сервера, приём данных ФС. Нужно указать UNC-путь к папке с экспортированными данными о пользователях и пароль, которым они шифровались)

# $source_ex - UNC путь к директории, в которой лежат экспортированные данные о пользователях и группах;
# $pass - пароль для шифрования этих данных (должен совпадать)
Param($source_ex,$pass)
&Net Use g: $source_ex
$SecStr = ConvertTo-SecureString -AsPlainText -Force -String $pass
Import-SmigServerSetting -User All -Group -Path G:\ -Password $SecStr -Verbose
Receive-SmigServerData -Password $SecStr

Засим всё. Два нюанса:
1. Локальные пользователи после переезда становятся заблокированными и получают опцию «требовать смену пароля». Думаю, что и пароль теряют. Однако, для доменной среды это не должно представлять проблемы.
2. Промежуток между запусками скриптов на исходном и целевом серверах (между отправкой и приёмом данных) должен быть меньше 5 минут. ПРичём можно сначала приём на целевом запустить, а потом отправку на исходном.

Добавить комментарий

Please log in using one of these methods to post your comment:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s