Requisito:
- Impressão de um host do Terminal Server para a impressora conectada ao TS Client pela conexão de área de trabalho remota.
- Crie um arquivo em lotes para cumprir o requisito acima.
Condições:
- O TS Client conecta o TS Host usando IP estático.
- No Host TS, a impressão pode ser enviada apenas para a porta LPT. O aplicativo executado lá não pode imprimir em outras impressoras, exceto na impressora compartilhada SMB ou na impressora conectada com a porta LPT.
- A impressora anexada ao cliente TS não será acessível usando o compartilhamento SMB
Etapas consideradas:
- Impressora no cliente TS para ser compartilhada como recurso local pela conexão de área de trabalho remota
- Impressora disponível no Host TS redirecionada do TS Client com acesso restrito para o usuário do RDC atualmente conectado. Portanto, o usuário atual do TS deve ser concedido com a permissão Printer Manage.
- Habilite o pool de impressoras, como se a impressão fornecida à porta LPT fosse redirecionada para a impressora em outra porta
Referências e ferramentas:
- Orientação principal por syneticon-dj
- Compartilhamento de impressora pela RDC
- Referência da ferramenta 'SetACL', em vez de 'SubInACL' . Link para download: SetACL
- Ferramenta de linha de comando do DOS QUSER (mesmo que QUERY USER)
-
Prncnfg.vbs (
%WINDIR%\System32\Printing_Admin_Scripts\<Language>\prncnfg.vbs
)
-
Lote:
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