Миграция роли сервера печати

advertisement
Миграция роли сервера печати
с Windows Server 2003 в Windows Server 2008 R2.
Миграция на новый принт-сервер достаточно долгий и творческий процесс, и подчас быстрее и
проще с мигрировать принт-сервер на новую платформу не в автоматическом режиме, а путем
создания принтеров в ручную. Но не всегда представляется возможным, что делать, если на
сервере печати зарегистрировано более ста принтеров. И в ручную создать порты, назначать шары,
указать драйвер и его настройки по умолчанию, установить права на доступ к принтеру становится
практически невозможно. В таких случаях нам на выручки приходит штатная утилита для
миграции принт-серверов под название Print Migration Tool (printbrm). Данное приложение
предоставляется в составе продукта Windows Server 2008 и доступно из оснастки сервера печати
или в виде консольного приложения. Утилита PrintBRM речь, о которой пойдет в дальнейшем,
применима с большим количеством оговорок и условий. И помогает в тех случаях, когда старый и
новый сервер печати должным образом подготовлены для миграции. Основные этапы миграции
на новый сервер печати под управление Windows Sever 2008R2 вкратце приведены ниже в
качестве примера, и на каждом этапе миграции я остановлюсь подробно чуть ниже.
И так основные этапы, которые я выдели при миграции сервера печати:
1. Подготовка исходного сервера печати.
a. Избавляемся от не используемых драйверов.
b. Обновляем драйвера принтеров до версий поддерживаемых новой платформой.
c. Добавляем x64 драйвера для принтеров.
2. Экспортируем сервер печати
a. Разбираем лог. (В случая появления непредвиденных ошибок исправляем на месте
или возвращаемся на этап 1.)
3. Импортируем файл с настройками сервера печати.
a. Разбираем лог (В случая появления непредвиденных ошибок исправляем на месте
или возвращаемся на этап 1.)
4. Мигрируем пользовательские подключения к принтерам на новый принт-сервер.
Практика показала, что очень часто приходится возвращаться к более раннему этапу повторно для
получения приемлемого результата в дальнейшем.
Избавляемся от не используемых драйверов.
При миграции сервера печати будут мигрировать все драйверы принтеров, зарегистрированные
на сервере печати. Далеко не все драйверы смогут пережить миграцию и зарегистрироваться на
новом сервере печати, поэтому следует заранее побеспокоиться об избавлении от не нужных (не
используемых) драйверов. Для избавления от драйверов следует зайти в оснастку для 2003 сервера
Пуск -->Принтеры и факсы-->Меню "Файл" --> Параметры сервера--> Вкладка "Драйвера". Для
определения какой драйвер следует удалить, можно воспользоваться сценарием powershell :
$printer=gwерmi win32_printer|select drivername|sort -unique drivername|%{$_.Drivername}
$driver=gwmi win32_printerdriver|%{$name=($_.name).split(","); write $name[0]}|sort -unique
compare-object -referenceobject $printer -DifferenceObject $driver
Или выполнить сценарий VBScript :
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colPrn = objWMIService.ExecQuery("Select * from Win32_Printer")
Set colDRV = objWMIService.ExecQuery("Select name from Win32_Printerdriver")
For each objDRV in colDRV
chk = ""
For each objPrinter in colPrn
if mid(objDRV.NAme,1,instr(1,objDRV.name,",")-1) = objPrinter.DriverName then
chk = "1"
exit for
end if
next
if chk <> "1" then
MSGBOX mid(objDRV.NAme,1,instr(1,objDRV.name,",")-1)
end if
Next
На выходе получим список не используемых драйверов сервера печати которые следует удалить. К
данному этапу можно отнести так же удаление или переназначение атрибутов принтера. Так что к
этому этапу придется возвращаться повторно в случае неудачного экспорта или импротра сервера
печати. К примеру практика показала что для некоторых принтеров не предоставляется
возможным мигрировать принт процессор в частности для принтера HP Color Laser Jet 2600n при
импорте на новый сервер печати выдавалась ошибка регистрации принт процессора. Решением
данной проблемы было смена на всех зарегистрированных принтерах данной модели принт
процессора со штатного IMFPrunt\IMF на ZIMPrint\IMF при импорте которого не выдавалось
ошибок.
Обновляем драйвера принтеров до версий поддерживаемых новой
платформой.
Практика показала что не все драйверы переживают перенос на новую платформу. Часть
драйверов потребуется установить на новой платформе в ручную для без ошибочной миграции. От
части ошибок при миграции сервера печати можно избавиться заранее, банальным обновлением
драйверов принтеров на более новые.
В качестве комментария: при смене драйвера принтера происходит переименование принтера так
что лучше копировать название принтера заранее перед сменой драйвера. Часто приходилось
сменять драйвер используемого принтера на универсальный драйвер в связи с тем что
специализированный драйвер не поддерживается новой ОС.
Для группового изменения используемых драйверов можно воспользоваться скриптом:
Set objWMIService = GetObject("winmgmts:")
Set colItems = objWMIService.ExecQuery("SELECT * from win32_printer" & _
" WHERE deviceid like '%HP%'",,48) 'указываем ключ имени для отбора необходимых принтеров, например HP
For Each objItem in colItems
WScript.echo "Changing driver for printer: " & objitem.Deviceid
objItem.Properties_("DriverName") = "HP Color LaserJet 2600n" ‘ устанавливаем имя драйвера
objItem.put_
Next
Добавляем x64 драйвера для принтеров.
При миграции на Windows Server 2008R2 обязательным условием является наличие x64 драйвера
для каждого используемого на сервере печати принтера . Так как платформа R2 представлена
только в одной архитектуре x64, то при создания принтера потребуется драйвер для платформы
x64. Важным моментом при выборе драйвера является его название . Если он не будет
соответствовать названию драйвера мигрируемого с предыдущей платформы то принтер не
создастся.
Добавить x64 драйвер можно как в исходную систему так и целевую. Если происходит
миграция на Windows Server 2008 с архитектурой x32, то драйвер для архитектуры x64 нет
необходимости добавлять.
В качестве примечания хочу добавить, что можно под редактировать название драйвера
принтера, исправив его в inf файле драйвера, указав требуемое название принтера. Однако нужно
учитывать что ЭЦП которой подписан драйвер станет недействительной. И в последствии - для
платформы x64 драйвер приходит в негодность, и его не возможно будет установить. А для
платформы х86 справится с проблемой использования не подписанных “отредактированных”
драйверов возможно, если разрешить данную возможность в GPO.
Драйверы для соответствующей архитектуры можно выдернуть из соответствующего
дистрибутива Windows Server 2008. Располагающийся в файле образа устанавливаемой системы,
расположенный на дистрибутивном диске \sources\install.wim. Или в уже установленном Windows
Server 2008 хранящиеся в каталогах %SYSTEMROOT%\system32\driverstore\filerepositry\prn*.
Или в соответствующем дистрибутиве Windows Server 2003 в файле \amd64\ntprint.inf или
\i386\ntprint.inf.
Экспортируем сервер печати
Для экспорта настроек сервера печати используем утилиту printbrm . Данная утилита
поставляется вместе с операционной системой Windows Server 2008 и располагается в каталоге
c:\windows\system32\spool\tools\. Синтаксис достаточно прост для экспорта настроек сервера
печати потребуется запустить утилиту в режиме повышенных привилегий с параметрами:
printbrm.exe -B -S \\<servername> -F <filename>
На выходе получиться cab архив содержащий в себе используемые файлы драйверов и несколько
XML файлов с описанием сервера печати. В ходе работы утилита выводит журнал работы в
консоль так что достаточно удобно отслеживать в реальном времени ошибки экспорта или
импорта . Так же ошибки можно отследить в журнале Windows Application.
Для экспорта настроек так же можно воспользоваться мастером переноса принтеров доступного
из под оснастки управление печатью роли сервера печати.
Но мастер не отображает ошибки в ходе работы. Так что отследить работу можно только с
помощью журнала Windows Application.
В случае обнаружения ошибок избавляемся от их причины и повторяем экспорт.
Импортируем файл с настройками сервера печати.
Перед импортом желательно в ручную установить драйверы используемых принтеров. Следует
следить за идентичностью названий. Импорт производится тем же способом что и экспорт.
Запускаем printbrm с параметрами -R -F <filename> -O FORCE . В случае появления ошибок
исправляем их и пробуем мигрировать повторно.
Мигрируем пользовательские подключения к принтерам на новый принтсервер.
Для миграции у пользователей принтеров на новый сервер печати можно
воспользоваться представленными ниже скриптом написанном на VB:
=========Logon script.vbs=========
oldsrv = "\\old_prn_2k3"
'Указываем имя сервера с которого мигрируем
newsrv="\\new_prn_2k8"
'Указываем имя сервера на который мигрируем
'Запрашиваем все принтеры пользователя подключенные к старому серверу
Set objWMIService = GetObject("winmgmts:impersonationLevel=impersonate}!\\.\root\cimv2")
Set colPrn = objWMIService.ExecQuery("Select * from Win32_printer where ServerName=""\\"&
oldsrv & """ ")
set objnetwork = CreateObject("WScript.Network")
'Для каждого найденного принтера подключаем его двойника с нового сервера
For each objPrinter in colPrn
objnetwork.Addwindowsprinterconnection newsrv & "\" & objPrinter.sharename
if objPrinter.default = "TRUE" then ' если притер назначен по умолчанию то назначаем
objnetwork.setdefaultprinter newsrv & "\" & objPrinter.sharename ' новый принтер
принтером по умолчанию
end if
objnetwork.removeprinterconnection oldsrv & "\" & objPrinter.sharename 'удаляем старый принтер
Next
Или выполнить сценарий PowerShel,l но помните что для выполнения данного сценария
он должен располагаться локально :
$oldsrv="\\old_prn_2k3"
$newsrv="\\new_prn_2k8"
$printers=gwmi win32_printer
$net=new-object -com Wscript.Network
foreach ($printer in $printers){
if ($printer.SystemName -eq $oldsrv){
$newname=$newsrv + $printer.name.substring($oldsrv.length, $($printer.name.length-$oldsrv.length))
$net.AddWindowsPrinterConnection($newname)
if ($Printer.Default -eq $true){$net.SetDefaultPrinter($newname)}
$net.RemovePrinterConnection($printer.name)
}}
Download