在远程桌面会话中打印

在远程桌面会话中打印

我们必须使用 Windows XP 计算机的远程桌面连接 Windows 2008 服务器。条码打印机与 XP 计算机相连,并且打印机在 RDC 会话中作为本地资源共享到服务器。

在服务器上,我们必须从打印到 LPT 端口或共享打印机(UNC 路径)的应用程序进行打印。为此,我使用结合 LPT1 和(终端服务器)TSxxx 端口的打印池进行配置。因为我不知道通过 UNC 路径访问终端会话打印机的选项。

但我有以下问题 -

每次我连接到远程会话时,我本地 Win XP 计算机上的打印机都会显示在 Win 2008 Server(终端服务器)上的“打印机和传真”中,但我无法从终端服务器管理 Win XP 打印机以启用池。每次在服务器上,我都必须更改安全权限,然后启用打印池。我如何才能保持安全权限不变?

其次,我创建了一个批处理文件来启用打印池。

rundll32 printui.dll,PrintUIEntry /Xs /n "打印机(来自客户端)" 端口名称 "LPT1:,TS005"

但每次终端会话中的打印机都连接到不同的终端会话端口。有什么解决方案可以修复 TS 端口吗?

任何人的帮助都将受到高度赞赏。

答案1

您无法“修复”您要求的参数,因为每次会话断开/连接时都会删除并重新创建打印机。因此,显然,更改应用程序似乎是最干净的解决方案。如果无法更改,您显然可以针对该问题编写一些脚本来缓解痛苦:

如果您的 Windows XP 计算机可以通过 SMB 从终端服务器访问,那么您显然可以在那里共享打印机并使用该\\%clientname%\<printer>符号,但您可能已经想到了这一点并因为某种原因而放弃了它。

答案2

要求:

  1. 通过远程桌面连接从终端服务器主机打印到连接到 TS 客户端的打印机。
  2. 创建一个批处理文件来完成上述要求。

状况:

  • TS 客户端使用静态 IP 连接 TS 主机。
  • 在 TS Host 上,打印只能发送到 LPT 端口。在那里运行的应用程序不能打印到除 SMB 共享打印机或连接到 LPT 端口的打印机以外的其他打印机。
  • 无法使用 SMB 共享访问与 TS 客户端连接的打印机

考虑的步骤:

  • TS 客户端上的打印机通过远程桌面连接作为本地资源共享
  • TS 主机上可用的打印机从 TS 客户端重定向,对当前登录的 RDC 用户具有受限访问权限。因此,必须向当前 TS 用户授予打印机管理权限。
  • 启用打印机池,就好像 LPT 端口的打印将被重定向到其他端口上的打印机

参考文献和工具:

批:

REM Begin of the script

REM Find out Session ID of Current RDC User using QUSER
QUSER CurrentTSUsername | FIND "CurrentTSUsername" > TSPrn_tmp.txt
FOR /F "tokens=1-3 delims= " %%i IN ('Type TSPrn_tmp.txt') DO SET TSID=%%k

REM Generate Printer name combining Printer name on Client and Terminal Session ID
SET PRINTER="ClientPrinter (redirected %TSID%)"

REM Grant ownership and Printer Manage Permission to current TS user using SETACL
SETACL -on %PRINTER% -ot prn -actn setowner -ownr n:CurrentTSUsername
SETACL -on %PRINTER% -ot prn -actn ace -ace "n:administrator;p:full"

REM Find out Terminal Session TSxxx port on which the printer mapped using Prncnfg.vbs
cscript %WINDIR%\System32\Printing_Admin_Scripts\en-US\prncnfg.vbs -g -p %PRINTER% | find "Port name" > TSPrn_tmp.txt
FOR /F "tokens=1-3" %%i IN ('TYPE TSPrn_tmp.txt') DO SET TSPORT=%%k

REM Enable Printer pooling combining LPT port and the TS Port
rundll32 printui.dll,PrintUIEntry /Xs /n %PRINTER% Portname "LPT1:,%TSPORT%"

REM Delete the Temp txt file
del TSPrn_tmp.txt

REM end of the script

相关内容