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