Estimados lectores,
Hace unas semanas estuve trabajando en un pequeño Logon Script que nos puede venir muy bien para el mapeo de las impresoras de red a los usuarios de un dominio de Microsoft Active Directory que están ubicados en una Unidad Organizativa determinada: VBScript Printer Map by User OU Membership. A mi modo de ver es una forma sencilla de mantener una lista única de servidores de impresión e impresoras existentes en toda la red (variables) con su correspondencia (procedimientos) en función de una lógica basada en su ubicación. Fundamentalmente se trata de resolver el planteamiento siguiente: un usuario perteneciente a una Unidad Organizativa X, por ejemplo Oficinas_Barcelona, necesita disponer de las impresoras que están físicamente instaladas en las Oficinas de Barcelona siendo el motivo del ejemplo una distribución geográfica. Es igualmente válido para redes de otras dimensiones donde los usuarios de Compras, por ejemplo, deben imprimir en la impresora o impresoras de dicho departamento y no en las de otro que pueda estar en una ubicación lejana (por ejemplo en otra sala).
'************************************************************************* ' Logon script para mapear impresoras en funcion de la OU a la que ' pertenece el usuario. El script debe mantener el listado actualizado ' de las impresoras asi como el listado de los servidores de impresion '************************************************************************* ' David Solé Pérez '************************************************************************* 'VARIABLES '************************************************************************* ' Lista Actualizada de Servidores de Impresion e Impresoras por OU '************************************************************************* 'Servidores de Impresion PrintSrv1 = "SRVPRINT01" PrintSrv2 = "SRVPRINT02" PrintSrv3 = "SRVPRINT03" 'Impresoras ubicadas en OU COMPRAS ImpreCOMPRAS1 = "COMPRAS_NOMBRE1" ImpreCOMPRAS2 = "COMPRAS_NOMBRE2" ImpreCOMPRAS3 = "COMPRAS_NOMBRE3" 'Impresoras ubicadas en OU DIRECCION ImpreDIRECCION1 = "DIRECCION_NOMBRE1" ImpreDIRECCION2 = "DIRECCION_NOMBRE2" ImpreDIRECCION3 = "DIRECCION_NOMBRE3" 'Impresoras ubicadas en OU VENTAS ImpreVENTAS1 = "VENTAS_NOMBRE1" ImpreVENTAS2 = "VENTAS_NOMBRE2" ImpreVENTAS3 = "VENTAS_NOMBRE3" 'PROCEDIMIENTOS 'Obtener la OU bajo la que esta definido el usuario que hace login Function GetUserOU Dim objSysInfo: Set objSysInfo = CreateObject("ADSystemInfo") Dim objUser: Set objUser = GetObject("LDAP://" & objSysInfo.userName) Dim objOU : Set objOU = GetObject(objUser.Parent) GetUserOU = objOU.distinguishedName End Function 'Borrar impresoras mapeadas previamente en la sesion del usuario Sub DeletePrinters() On Error Resume next Set WshNetwork = WScript.CreateObject("WScript.Network") Set Printers = WshNetwork.EnumPrinterConnections For i = 0 to Printers.Count - 1 Step 2 If Left(ucase(Printers.Item(i+1)),2) = "\\" Then WSHNetwork.RemovePrinterConnection Printers.Item(i+1) End IF Next End Sub 'Mapeo de las impresoras de cada OU y establecer su impresora predeterminada Sub MapPrinterByOU() Select Case strOU Case "COMPRAS" objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv1 & "\" & ImpreCOMPRAS1 objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv2 & "\" & ImpreCOMPRAS2 objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv3 & "\" & ImpreCOMPRAS3 objNetwork.SetDefaultPrinter "\\" & PrintSrv1 & "\" & ImpreCOMPRAS1 Case "DIRECCION" objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv1 & "\" & ImpreDIRECCION1 objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv2 & "\" & ImpreDIRECCION2 objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv3 & "\" & ImpreDIRECCION3 objNetwork.SetDefaultPrinter "\\" & PrintSrv1 & "\" & ImpreDIRECCION1 Case "VENTAS" objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv1 & "\" & ImpreVENTAS1 objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv2 & "\" & ImpreVENTAS2 objNetwork.AddWindowsPrinterConnection "\\" & PrintSrv3 & "\" & ImpreVENTAS3 objNetwork.SetDefaultPrinter "\\" & PrintSrv1 & "\" & ImpreVENTAS1 Case Else WScript.Quit End Select End Sub 'INICIO strOU = GetUserOU 'Determinar OU Set objNetwork = CreateObject("WScript.Network") 'Definicion Objeto Network DeletePrinters 'Eliminar mapeos previos MapPrinterByOU 'Mapear impresoras
This Post by David Solé Pérez is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License