Назад | Перейти на главную страницу

назначение принтеров для рабочих станций Windows XP в среде активного каталога

Я использую следующий сценарий для удаления любых старых сетевых принтеров с машин, а затем назначения соответствующих принтеров и установки одного из них по умолчанию. Этот сценарий назначается организационной единице, в которой находятся рабочие станции, и использует кольцевую проверку групповой политики, поэтому все пользователи, вошедшие в систему, получат сопоставленные для них соответствующие принтеры.

Я попытался использовать новый диспетчер принтеров как часть W2K3 R2, но при назначении значения по умолчанию таким образом я получаю сообщение об ошибке, что принтер не существует, поэтому я вернулся к использованию сценария.

Один недостаток, который я замечаю, заключается в том, что он не удаляет никакие принтеры, которые случайно подключены к сеансу RDP (мы не видим это везде, но есть несколько мест). Есть ли способ перечислить все принтеры RDP и удалить их аналогично тому, как я перечисляю и удаляю сетевые принтеры?

' 
' Printers.vbs - Windows Logon Script.
'

RemovePrinters
AddPrinters

Sub RemovePrinters()
   On Error Resume Next
   Dim strPrinter
   Set objNetwork = WScript.CreateObject("WScript.Network")
   Set colPrinters = objNetwork.EnumPrinterConnections
   For i = 0 to colPrinters.Count -1 Step 2
      strPrinter=CStr(colPrinters.Item(i+1))
      If Not InStr(strPrinter,"\\") = 0 Then
         objNetwork.RemovePrinterConnection strPrinter, True, True
      End If
   Next
End Sub


Sub AddPrinters()
   On Error GoTo 0
   Set objNetwork = CreateObject("WScript.Network") 
   objNetwork.AddWindowsPrinterConnection "\\printers1\JH120-DELL5310"
   objNetwork.SetDefaultPrinter "\\printers1\Jh120-DELL5310"
End Sub

Я не уверен, как ОС обрабатывает RDP-принтеры, считает ли она их «локальными» или «сетевыми». Если принтеры отображаются в реестре в разделе HKLM \ System \ CurrentControlSet \ Control \ Print \ Printers, используйте printui.dll для удаления объекта принтера следующим образом:

rundll32 printui.dll, PrintUIEntry / dl / n "ЗДЕСЬ ИМЯ ПРИНТЕРА"

OTOH, если принтеры отображаются в реестре в разделе HKCU \ Printers \ Connections, то используемый вами метод должен сработать. Может еще что-то мешает удалению соединений? Подключены ли пользователи к терминальному серверу при запуске сценария?

Я использую это для удаления принтеров, кажется, работает во всех сценариях.

    Dim objNetwork, objPrinters
Set objNetwork = CreateObject("WScript.Network")
Set objPrinters = objNetwork.EnumPrinterConnections
' ### Delete selected network printer
objNetwork.RemovePrinterConnection "\\GARCIA\Dell Printer 3100cn PS", True, True
objNetwork.RemovePrinterConnection "\\HENDRIX\Dell Printer 3100cn PS", True, True
objNetwork.RemovePrinterConnection "\\HENDRIX\Brother PCL5e Driver", True, True
objNetwork.RemovePrinterConnection "\\HENDRIX\HP LaserJet 4250 PS", True, True
objNetwork.RemovePrinterConnection "\\STANLEY\HP LaserJet 4250 PS", True, True