1

Надеюсь, кто-то может помочь .....

Мне нужно попытаться автоматизировать переназначение очередей печати профилей пользователей со двух «старых» на «новые» серверы печати. Существует 1000 клиентов, каждый из которых имеет множество очередей на одном или обоих старых серверах печати, и единый подход к развертыванию не использовался.

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

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

У меня есть пакетный файл, который я собрал вместе, который работает, однако он довольно медленный, учитывая объем очередей печати (около 350 между двумя серверами), через которые он должен проходить.

Логика довольно проста: она помещает все очереди со старых серверов в массив, а затем проверяет, что установлено в локальном реестре на клиентских компьютерах в HKCU\printers\connections. Если он находит совпадение, он добавляет ту же очередь с нового сервера и удаляет старую очередь.

Как я уже сказал, следующее «работает», но для прохождения 350 нечетных очередей построчно требуется около 30 сек на сервер.

Я не автор сценариев (что, я уверен, вы поняли, лол), но был бы очень признателен всем, кто мог бы предложить лучший способ кодирования этого, чтобы он был более эффективным при обработке?

Ниже для удобства просмотра я перечислил только 5 очередей, но в самом скрипте около 350 очередей.

@echo off

REM Define Variables
SET oldserver=2008_PRN1
SET newserver=2016_PRN1
SET oldserver2=2008_PRN2
SET newserver2=2016-PRN2

REM Create Array
setlocal enabledelayedexpansion 

set pqueue[0]=PS1-Printer1
set pqueue[1]=PS2-Printer2
set pqueue[2]=PS1-Printer3
set pqueue[3]=PS2-Printer4
set pqueue[4]=PS1-Printer5



REM - FIRST SERVER - Loop through local registry and Array, add/remove queues as found
for /l %%n in (0,1,4) do ( 
  For /F "Tokens=4 delims=\" %%I In ('reg query HKCU\Printers\Connections ^|find /I ",,%oldserver%,!pqueue[%%n]!"') DO (
    rundll32 printui.dll PrintUIEntry /in /q /n"\\%newserver%\!pqueue[%%n]!"
    For /F "Tokens=4 delims=\" %%I In ('reg query HKCU\Printers\Connections ^|find /I ",,%oldserver%,!pqueue[%%n]!"') DO (
      rundll32 printui.dll PrintUIEntry /dn /q /n"\\%oldserver%\!pqueue[%%n]!"
    )  
  )
)

REM - SECOND SERVER - Loop through local registry and Array, add/remove queues as found
for /l %%n in (0,1,4) do ( 
  For /F "Tokens=4 delims=\" %%I In ('reg query HKCU\Printers\Connections ^|find /I ",,%oldserver2%,!pqueue[%%n]!"') DO (
    rundll32 printui.dll PrintUIEntry /in /q /n"\\%newserver2%\!pqueue[%%n]!"
    For /F "Tokens=4 delims=\" %%I In ('reg query HKCU\Printers\Connections ^|find /I ",,%oldserver2%,!pqueue[%%n]!"') DO (
      rundll32 printui.dll PrintUIEntry /dn /q /n"\\%oldserver2%\!pqueue[%%n]!"
    )  
  )
)

:quit

0