누군가가 도움을 줄 수 있다고 생각하면 .....
사용자 프로필 인쇄 대기열을 '오래된'프린트 서버에서 '새'프린트 서버로 재 매핑하려고 시도하고 자동화해야합니다. 1000 대의 클라이언트가 있으며 각 서버에는 이전 인쇄 서버 중 하나 또는 둘 다에서 다양한 대기열이 있으며 일관된 배치 방법이 사용되지 않았습니다.
각각의 새로운 프린트 서버는 인계받는 데 사용되는 큐의 복제본 집합을 가지며 인쇄 관리에서 내보내기 / 가져 오기를 사용하여 간단하게 수행됩니다.
모든 대기열은 최종 사용자가 추가했으며 대기열을 추가 / 제거 할 수있는 권한이 있습니다. 그룹 정책은 배포에 사용되지 않으므로이를 사용하여 다시 배포해야만 안타깝게도 실현할 수 없습니다.
나는 함께 작동 한 자갈로 묶은 배치 파일을 가지고 있지만, 실행 대기열 (2 대의 서버 사이에서 약 350 번)이 필요하므로 상당히 느립니다.
논리는 매우 간단합니다. 이전 서버의 모든 대기열을 배열로 가져온 다음 HKCU \ printers \ connections의 클라이언트 컴퓨터에서 로컬 reg 하이브에 설치된 항목을 확인합니다. 일치하는 항목이 있으면 새 서버에서 동일한 큐를 추가하고 이전 큐를 삭제합니다.
내가 말했듯이, 다음은 '작동하지'만, 350 개의 홀수 대기열을 한 줄씩 실행해야 서버를 완료하는 데 약 30 초가 소요됩니다.
나는 스크립트 작성자가 아니기 때문에 (LOL을 알아 냈음에 틀림 없다), 코드를 더 효율적으로 처리 할 수있는 더 좋은 방법을 제안 할 수있는 사람이라면 누구에게나 감사하게 생각할 것입니다.
아래에서는보기 쉽도록 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