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




