Предоставление принтера, подключенного к тонкому клиенту RDP в общее пользование.
Некоторые тонкие клиенты не имеют возможность предоставлять подключенный к ним принтер в общее пользование. Например, Тонк 1501 с Windows CE. Принтеры, подключенные к ним отображаются на терминальном сервере только у пользователя, залогинившегося с тонкого клиента, а также у членов групп «Администраторы» и «Опытные пользователи». Т.к. RDP принтеры создаются в момент подключения пользователя и удаляются, когда пользователь выходит из системы — нельзя поставить для него постоянные разрешения. Выход из данной ситуации: использование скриптов. Было бы логичнее использовать logon-скрипт. Но у пользователя отсутствует право на установку принтера и прав доступа на него. Поэтому ниже предлагается вариант с использованием журнала событий (eventlog). Данный скрипт будет выполняться под администратором.
Отслеживание события с кодом ID:2 от источника Print в журнале событий (eventlog).
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate, (Security)}!\\" & _
strComputer & "\root\cimv2")
Set objShell = WScript.CreateObject("WScript.Shell")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("Select * from __instancecreationevent where " _
& "TargetInstance isa 'Win32_NTLogEvent' " _
& "and TargetInstance.EventCode = '2' and TargetInstance.SourceName='Print'")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Разбор сообщения -> имя принтера.
strAlertToSend = objLatestEvent.TargetInstance.Message
lenstr=Instr(1,strAlertToSend,".")-16
PrinterName = Mid(strAlertToSend,16,lenstr)
Установка разрешение (прав) на принтер с помощью утилиты setprinter из Windows Resource Kit (ссылка).
objShell.Run "C:\scripts\setprinter.exe " & chr(34) & PrinterName & chr(34) & " 3 "& chr(34) & "pSecurityDescriptor=O:BAG:SYD:(A;CIIO;RC;;;CO)(A;OIIO;GA;;;CO)(A;;SWRC;;;WD)(A;CIIO;GX;;;WD)(A;;LCSWSDRCWDWO;;;BA)(A;OICIIO;GA;;;BA)(A;;LCSWSDRCWDWO;;;PU)(A;OICIIO;GA;;;PU)" & chr(34)
Loop