活动目录环境中的 Windows XP 工作站的打印机分配

活动目录环境中的 Windows XP 工作站的打印机分配

我使用以下脚本来处理从机器上删除任何旧的联网打印机,然后分配适当的打印机并将其中一个设为默认打印机。此脚本被分配给工作站所在的 OU,并使用组策略环回,因此所有登录的用户都将获得为其映射的适当打印机。

我尝试使用新的打印机管理器作为 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

答案1

我使用它来删除打印机似乎在所有情况下都有效。

    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

答案2

我不确定操作系统如何处理 RDP 打印机,是将它们视为“本地”打印机还是“网络”打印机。如果打印机出现在注册表中的 HKLM\System\CurrentControlSet\Control\Print\Printers 下,则使用 printui.dll 删除打印机对象,如下所示:

rundll32 printui.dll,PrintUIEntry /dl /n “打印机名称在此处”

另一方面,如果打印机出现在注册表中的 HKCU\Printers\Connections 下,那么您使用的方法应该可以解决问题。也许还有其他原因阻止删除连接?脚本运行时用户是否连接到终端服务器?

相关内容