Mapeo de impresoras en red por usuarioa

Iniciado por efer27, 24 Abril 2011, 17:00 PM

0 Miembros y 3 Visitantes están viendo este tema.

T0rete

Yo lo decía porque el siguiente problema que se encuentra es el bTroubleFlag y justo aparece con el dim

CitarFor the life of me, I couldn't get it to unset bTroubleFlag, so it was always processing the script with extra output. I ended up commenting out the few lines that enables it.

Novlucker

#21
Esa "bandera" es una chapuza de alguien :xD , así debería de funcionar
Código (vb) [Seleccionar]
on error resume next

Set objNetwork = CreateObject("Wscript.Network")

'Get current user info from active directory
Set objADSystemInfo = CreateObject("ADSystemInfo")
'bind to current user in active directory
set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)

Set objPrinter = objNetwork.EnumPrinterConnections
'Test to see if we have any printers mapped
If objPrinter.Count > 0 Then
   'The Printer array is Printer name, printer path that is why it is step 2
   for i=1 to objPrinter.Count Step 2
       'test to make sure it is a network printer
       if instr(objPrinter.Item(i),"\\") <> 0 then
           objNetwork.RemovePrinterConnection objPrinter.Item(i),true,true
       end if
   next
end if

'Get an array of group names that the user is a member of objMemberOf
objMemberOf = objUser.MemberOf
for Each objGroup in objMemberOf
   'Test to see if it is a printer group. all printer groups should be in the same OU
   if (instr(objGroup,"OU=Printer-Groups") <> 0) then
       'Bind to the group to get is description. The description contain the path to the printer
       set objGroupEnum = GetObject("LDAP://" & objGroup)
       objNetwork.AddWindowsPrinterConnection objGroupEnum.description
       set objGroupEnum = nothing
   end if
next

'Repeat as above for the default printer
for Each objGroup in objMemberOf
   if (instr(objGroup,"OU=Printer-Default-Groups") <> 0) then
       set objGroupEnum = GetObject("LDAP://" & objGroup)
       objNetwork.SetDefaultPrinter objGroupEnum.description
       set objGroupEnum = nothing
   end if
next


Obviamente la solución que se plantea es tener un agregar los usuarios a un grupo para las impresoras, en cuya descripción de grupo esta la ruta al servidor. Esos son los que aparecen en las líneas 26 y 36 del script.

Se podrían llegar a poner varios servidores para un mismo grupo, pero primero habría que ver si este funciona :P

La primera parte elimina todas las impresoras de red, la segunda agrega las nuevas, y la última configura las por defecto.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

T0rete

Lo de la ruta del servidor y los dos servidores no lo entendi. El script coge la ruta de ldap por pertenencia a un dominio y no hace falta ruta de servidor. En el caso de dos servidores de impresión tampoco hay que añadir ruta ni nada si estan dentro del mismo dominio porque la impresoras son objetos  del Active directory y simplemente hay que añadirlas a la unidad organizativa correspondiente.

Lo que si hay que hacer es crear una unidad organizativa donde se definan los grupos de usuario y que impresora le corresponden.

efer27

Hola,

Ejecute el script sobre el dominio y el resultado es el siguiente.

Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos.


***** script completed - exit code: 0 *****

* Lo que comenta 0,0 es agregar las impresoras al grupo es un opcion valida.
* por ese motivo queria que lea desde un archivo plano CSV o TXT para que el          mantenimiento sea mas facil y no se manipule el Active directory sino el archivo para cualquier cambio, alta o baja de impresora.

archivo plano CSV o TXT:
prueba1 (OU)                prueba2 (OU)              prueba3 (OU)
\\server\impresora        \\server\impresora      \\server\impresora

* Cuando el usuasrio inicie la sesion se ejcute el script
* El script compare si pertenece al grupo.
* El script lea desde un archivo plano CSV o TXT
* si pertenece que elimine las impresoras y mapee las nuevas

espero no complicar a nadie y no ser tan fastidioso lo que pido es que ser novato en estos temas es complicado.

Saludos


Novlucker

0,0 ,es que eso no es lo que hace el script, lo único que he hecho es adaptar el que habías puesto.

Código (vb) [Seleccionar]
'Coleccion de grupos a los que pertenece el usuario
objMemberOf = objUser.MemberOf
'Por cada grupo en la lista
for Each objGroup in objMemberOf
'Si hay una unidad con nombre Printer-Groups
if (instr(objGroup,"OU=Printer-Groups") <> 0) then
'Obtenemos el grupo
       set objGroupEnum = GetObject("LDAP://" & objGroup)
'Nos conectamos a la impresora utilizando la ruta que aparece en la descripcion de grupo
       objNetwork.AddWindowsPrinterConnection objGroupEnum.description
       set objGroupEnum = nothing
end if
next


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

efer27

Hola,

Si entiendo lo que me comentas, esta todo muy bien y te agradezco por el tiempo.
Mi pregunta es este script se puede adecuar al comentario que te hice que lea desde una archivo plano CSV o TXT y compare desde el archivo los grupos y las impresoras sin tener que manipular el active directory.

Saludos


efer27

hola,

Uff no me funciona el script no me mapea las impresoras que estan en la OU, pero bueno sigo intentando modificar el script para que pueda leer desde un cvs o txt para no manipular el active directory.

saludos

T0rete

No entendí lo que quieres decir Novlucker, creo que se lo decias a el y pusiste mi nombre o realmente no entendi nada :xD No tienes que meter la ruta del servidor ni impresora en el script.


El script que yo puse supone que el entorno es un dominio windows en el que las impresoras están en el active directory. Lo que hace es mirar la unidad organizativa de impresion que creas en el AD a la que pertenece el usuario que está iniciando sesión y en la que esta la relación de usuarios e impresoras asociadas. Se trata de que tu agreges y quites impresoras en el active directory y script solo es para mapearlas de acuerdo con lo que aparezca en la unidad organizativa.

Lo otro que propones con el archivo de texto es un poco chapuza ya que tienes que dar permisos a los usuarios para agregar y quitar impresoras en red sin contar con los permisos del servidor de impresión (ya que no deseas tocar el AD). Es mas facil administrar la impresoras mediante una unidad organizativa que lo del archivo de texto por el tema de permisos.


T0rete

efer27, ¿Has creado la OU "Printer-Groups" y has metido en ella los usuarios asociados a las impresoras?

Novlucker

#29
Puede ser 0,0, a lo mejor no nos estamos entendiendo, es que creo que me entiendo mejor con t0rete, se ha vuelto a ir? :xD
El problema de los "arreglos" que le he hecho al script son que basicamente ha sido con los ojos vendados, no tengo un AD para hacer las pruebas ni la soltura para manejarme de este modo :xD

Lo que digo seguramente este mal, pero se desprende de aquí;
Código (vb) [Seleccionar]
'Bind to the group to get is description. The description contain the path to the printer
set objGroupEnum = GetObject("LDAP://" & objGroup)
objNetwork.AddWindowsPrinterConnection objGroupEnum.description


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein