none
Mapeo de impresoras en red por usuarioa RRS feed

  • Pregunta

  • Buenas tardes, tengo un problema para agregar impresoras por red.

    Estoy haciendo un script para mapear impresoras de red que corresponda a una OU el problema que presento es que no me agrega las impresoras.

    Tengo un archivo txt en el cual esta las OU y las impresoras que corresponde a cada uno, si alguien mepuede ayudar se lo agradecere soy nuevo en este mundo de script.

    dejo el codigo para ver si alguno me da una solucion.

    'Set global script objects and variables
    Set wshShell = WScript.CreateObject("WScript.Shell")
    Set wshNetwork = WScript.CreateObject("WScript.Network")
    Set wshObj = WScript.CreateObject("Scripting.FileSystemObject")

    '------------------------------- VARIABLES de usuario  --------------------------------
    strNetworkPath = "C:\Copia de impresoras1.txt"
    '----------------------------- +++++++++++++++++ ------------------------------


    'On Error Resume Next

    Call DisconnectNetworkPrinters()
    MsgBox "Ejecuta asignar prn"
    Call ConnectPrinters(strNetworkPath, wshNetwork.computername)

     


    Sub DisconnectNetworkPrinters()
      Set arPrinters = wshNetwork.EnumPrinterConnections

      For i = 0 to (arPrinters.Count - 1) Step 2
        If (Left(arPrinters.Item(i + 1), 2) = "\\") Then
          wshNetwork.RemovePrinterConnection arPrinters.Item(i + 1)
        End If
      Next
    End Sub

    ----------------------------------------------------------

    Agregar impresora por OU

    ----------------------------------------------------------------------
    Sub ConnectPrinters(strListFile, strCompname)
    Dim arrLinParts()
    Dim strCadTratar
      Set ListFile = wshObj.OpenTextFile(strListFile, 1)
     
      Do While ListFile.AtEndOfStream <> True
        strCadTratar = ListFile.ReadLine
        arrLineParts = Split(strCadTratar, Space(1))
        
        MsgBox strCompname & " " & strCadTratar
        If UCase(strCompname) = UCase(arrLineParts(0)) Then
        
          For i = 0 To UBound(arrLineParts)
            If arrLineParts(i) <> "" Then
              wshNetwork.AddWindowsPrinterConnection UCase(arrLineParts(i))
            End If
          Next
          
          If arrLineParts(1) <> "" Then
            wshNetwork.SetDefaultPrinter UCase(arrLineParts(1))
          End If
        End If
      Loop
     
      ListFile.Close
    End Sub

     

    saludos


    domingo, 1 de mayo de 2011 15:45

Respuestas

  • ¿Cómo se supone que se debe efectuar la agregación de las impresoras? Las GPOs sólo se aplican a usuarios y equipos, no a OU. Se pueden vincular a OUs, en cuyo caso son aplicadas a los objetos de usuario y equipo contenidas en las OUs.

    Si no te entiendo mal, lo que necesitas es identificar el usuario que ejecuta el script a qué OU pertenece y en función de eso montar una impresora u otra. Para averiguar la OU a la que pertenece el usuario que está ejecutando un script:

     

    Dim obj_NH
    Dim obj_UsuarioNT
    Dim obj_UsuarioLDAP
    
    Set obj_NH = WScript.CreateObject("WScript.Network")
    Set obj_Usuario = GetObject("LDAP://" & _
            f_NTaDN(obj_NH.UserDomain & "\" & obj_NH.UserName,""))
    WScript.Echo obj_Usuario.Parent
    
    Function f_NTaDN(str_RutaNT, str_DN) 'As String
    '***********************************************************************
    '* Procedimiento: f_NTaDN                       *
    '* Tipo     : Función                       *
    '* Devolución  : Cadena                        *
    '* Fecha y Hora : May 2007                       *
    '* Autor    : Fernando Reyes                    *
    '*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
    '* Propósito  : Esta función recibe o bien el nombre NT       *
    '*        ("dominio\nombre"), como primer parámetro, de un   *
    '*        objeto de dominio y devuelve el nombre distinguido  *
    '*        de ese objeto, o bien el nombre distinguido de un  *
    '*        objeto, como segundo parámetro, y devuelve el    *
    '*        nombre NT.                      *
    '*        Basada en el código de Richard Mueller, MVP de    *
    '*        Scripting y ADSI (http://www.rlmueller.net)     *
    '***********************************************************************
    
      'Constantes para el objeto NameTranslate
      Const ADS_NAME_INITTYPE_GC = 3
      Const ADS_NAME_TYPE_NT4 = 3
      Const ADS_NAME_TYPE_1779 = 1
    
      Dim obj_TraductorDeNombres
      Dim int_De, int_A,str_Nombre
    
      If Len(str_RutaNT) > 0 Then
    
        int_De = ADS_NAME_TYPE_NT4
        int_A = ADS_NAME_TYPE_1779
        str_Nombre = str_RutaNT
    
      ElseIf Len(str_DN) > 0 Then
    
        int_De = ADS_NAME_TYPE_1779
        int_A = ADS_NAME_TYPE_NT4
        str_Nombre = str_DN
    
      Else
    
        WScript.Echo "Error 1 en f_NTaDN: No se ha pasado " & _
               "ningún nombre para traducir."
        Exit Function
      End If
      'Creamos el objeto NameTranslate.
      Set obj_TraductorDeNombres = CreateObject("NameTranslate")
    
      On Error Resume Next
    
      'Lo iniciamos localizando el catálogo global
      obj_TraductorDeNombres.Init ADS_NAME_INITTYPE_GC, ""
    
      'Establecemos el parámetro de nombre en el traductor de nombres
      obj_TraductorDeNombres.Set int_De, str_Nombre
    
      'Usamos el método Get del traductor de nombres para obtener el
      'nombre traducido
      f_NTaDN = obj_TraductorDeNombres.Get(int_A)
    
      On Error GoTo 0
      'Limpieza de kks :-)
      Set obj_TraductorDeNombres = Nothing
    
    End Function 'f_NTaDN

     


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    • Marcado como respuesta Ismael Borche miércoles, 18 de mayo de 2011 18:30
    miércoles, 4 de mayo de 2011 7:04
    Moderador