Esperando que alguém possa ajudar .....
Eu preciso tentar automatizar o remapeamento de filas de impressão de perfis de usuário de dois 'antigos' para 'novos' servidores de impressão. Existem milhares de clientes, cada um com uma variedade de filas de um ou ambos os servidores de impressão antigos, e nenhuma abordagem consistente de implantação foi usada.
Cada novo servidor de impressão tem um conjunto de filas de réplicas daquele em que está sendo substituído, obtido simplesmente usando exportação / importação do gerenciamento de impressão.
Todas as filas foram adicionadas pelos usuários finais, eles têm direitos para adicionar / remover filas. A Diretiva de Grupo não foi usada para implantar, portanto, utilizá-la para "reimplantar" não é possível, infelizmente.
Eu tenho um arquivo de lote que eu preparei, o que é muito lento, dado o volume de filas de impressão (cerca de 350 entre os dois servidores) que ele precisa percorrer.
A lógica é bastante simples, coloca todas as filas dos servidores antigos em um Array e, em seguida, verifica o que está instalado no diretório local nos computadores clientes em HKCU \ impressoras \ conexões. Se encontrar uma correspondência, ela adicionará a mesma fila do novo servidor e excluirá a fila antiga.
Como eu disse, o seguinte 'funciona', mas ter que percorrer as 350 filas ímpares linha por linha leva aproximadamente 30 segundos por servidor para ser concluído.
Eu não sou uma pessoa de script (que eu tenho certeza que você descobriu lol), mas ficaria muito grato por qualquer um que pudesse sugerir uma maneira melhor de codificar isso para que ele seja mais eficiente em seu código. processamento?
Abaixo, listei apenas 5 filas para facilitar a visualização, mas no script real existem cerca de 350 filas.
@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
Tags printing batch-file