批处理文件 - 重新映射打印机连接

批处理文件 - 重新映射打印机连接

希望有人能帮忙.....

我需要尝试自动将用户配置文件打印队列从两个“旧”打印服务器重新映射到“新”打印服务器。有 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

相关内容