Título: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 24 Abril 2011, 17:00 pm Un saludo para todos,
espero que alguien me pueda ayudar soy nuevo en el mundo de script y me gustaria aprender. bueno mi pregunta es la siguiente. Tengo un servidor de impresoras con mas de 100 impresoras y lo migre a otro servidor, ahora necesito que los usuario se les mapee las impresoras al nuevo servidor, revisando encontre este script que lee desde un excel y mapea las impresoras, mi problema es como puedo cambiar la instruccion del excel para que me lea de una archivo CSV o TXT, adjunto el script para que alguien me pueda ayudar si se puede reducir el codigo seria excelente. Saludo Código
Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Di6it4Lj4ck4L en 25 Abril 2011, 00:59 am Aquí esta un manual muy bueno http://foro.elhacker.net/scripting/tutorial_vbscript-t229032.0.html;msg1090556 (http://foro.elhacker.net/scripting/tutorial_vbscript-t229032.0.html;msg1090556) Escrito por Novlucker en Diciembre del 2008, y abajo te cito la parte del Tutorial que te servira, mucha suerte!! Citar Leer desde archivos de texto Así como abrimos archivos y podemos escribir en ellos, también existe la posibilidad de leer desde ellos, para lo cual utilizaremos readline, y readall. Como se puede imaginar, con readline iremos leyendo una a una las líneas del archivo (cada vez que pongamos readline leeremos solo una), con este, leemos una línea, y el puntero se situa al final de la línea, para que a la próxima ejecución de esta función, sea la línea siguiente la que sea leída. Con readall en cambio, leeremos el total de archivo. Existe además una función llamada skipline, con la cual saltaremos la lectura de una línea. Ejemplo: Código
Atributos de archivos y carpetas A continuación explicaré el método mediante el cual, se puede obtener, o bien cambiar, los atribuos de archivos y carpetas (es prácticamente igual para ambas cosas)... Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 13:12 pm Hola,
la respuesta esta muy bien, pero disculpar mi ignorancia eh estado probando introducir el codigo con la ruta del archivo y no me puedo aclarar, no se si me puedes orientar si lo que reemplazo esta correcto, me estoy iniciando en este campo y aun no lo tengo muy claro, ya descarge los manuales que me indicaste y estan muy bien. se que hay veces estos temas cansan cuando las personas son novatas y en verdad debe ser algo facil. si los cambios que realizo son solo en estas lineas o afectaran a las demas ? saludos Código
Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 13:29 pm Buenas
No me gusta el script :xD , podría ser mucho más simple. Podrías poner un par de líneas del CSV o TXT para ver como esta la estructura? :P Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 13:41 pm Hola,
Gracias por la pronta respuesta, si el script es muy extenso. si hay alguna manera de acortarlo seria bueno. esta es la estructura del CSV Prueba1 Prueba2 Prueba3 \\server1\123456 \\server1\123456 \\server1\12345678 \\server1\12345678 estoy probando en maquinas virtuales para luego pasarlo a lo real. claro si se puede hacer mas simple y me puedes indicar como hacerlo te lo agradecere. otra consulta, aparte de los tutoriales que publicaste y muchos ejemplos en el foro, conoceras algun buen libro el cual pueda leer para poder practicar, Si esta en castellano seria mejor. Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 14:00 pm Más preguntas ...
Cada una de esas rutas apunta a una impresora pero, ¿qué significa Prueba1, 2 y 3? La verdad que en lo que respecta a libros, cuando hice el tuto fue porque cuando me interesé en vbs no encontraba material en español en ningún lado, salvo la msdn, por lo que el tuto también me servía como "ayuda memoria" :P. Lo bueno hubiese sido terminarlo en algún momento, y ahora que lo veo, había muchisimo para mejorar :xD Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 14:23 pm Hola,
te comento prueba1 prueba2 y prueba3 son grupos que eh creado en mi Active directory para realizar pruebas. la estructura seria asi : Prueba1(OU) Prueba2(OU) Prueba3 (OU) \\server\impresora \\server\impresora \\server\impresora lo que quiero es que cuando inicie la sesion el usuario valide al grupo que pertenece y asi pueda asignar la impresora. otra opcion seria que verifique que impresoras tiene el usuario y solo cambie la ruta del servidor a donde imprimira. son opciones no se cual me recomiendas. sobre los tutoriales estan muy bien, si lo pudieras terminar y poner algunos ejemplos para poder practicar seria genial. Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 15:14 pm Me gusta más la opción de obtener las impresoras actuales y cambiar el nombre del servidor :P
Prueba esto a ver si se listan bien las impresoras remotas, que las que tengo ahora son IP y van en local :P Código
Dime como te aparece el texto Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: T0rete en 25 Abril 2011, 15:24 pm Citar lo que quiero es que cuando inicie la sesion el usuario valide al grupo que pertenece y asi pueda asignar la impresora. Si le das un vistazo al script center de technet lo mismo encuentras una solucion que no use un archivo y se base en las politicas de grupo. http://www.microsoft.com/spain/technet/recursos/script.mspx Creo que uno de los que se adaptan a lo que quieres es este de visual b: Map Printers Based on Group Membership http://gallery.technet.microsoft.com/scriptcenter/bf160908-93e3-484c-944f-1c95004c5498 Código
Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 15:43 pm Hola Novlucker,
probe el script y no me agrega ninguna impresora. si suena bien esto de cambiar el nombre del servidor pero hay que tener en cuenta si el equipo es nuevo como saber que impresoras le corresponde ???. saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 15:50 pm Es que el script que te había dejado solo listaba, no agregaba ninguna impresora.
Para lo que pides te serviría el que ha dejado 0,0, solo que tal vez habría que hacerle un par de modificaciones. Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 15:56 pm Hola,
Gracias 0,0 por responder a mi preguntael script esta bien. Que cambios se tendria que hacer ?? Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 16:01 pm Hola,
probe el script que me comento 0,0 y me sale este error ?? Microsoft (R) Windows Script Host versión 5.8 Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos. \\192.168.2.140\netlogon\prueba.vbs(20, 47) Error de compilación de Microsoft VBScript: Error de sintaxis ***** script completed - exit code: 1 ***** Linea en el que sale error . 20 msgbox "Deleting:" & vbcrlf & Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: T0rete en 25 Abril 2011, 16:05 pm Si lees la discusion del centro de scritps creo que lo mencionan. Esa parte es para borrar las impresoras anteriormente mapeadas, esa parte la puedes eliminar sin problemas.
El no borrar las impresoras mapeadas simplemente te dará problemas si el usuario tiene impresoras mapeadas del anterior server y si cambias las impresoras asignadas a los grupos. Se iran quedando todas las impresoras no validas mapeadas. No se si alguien puede corregir esa parte. Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 16:29 pm En cuanto tenga un rato lo miro, pero por lo pronto hay partes del script que estan comentadas, sin las cuales no funciona :-\
Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 16:41 pm Hola Novlucker,
te agrdesco el interes que pones a la pregunta, es el unico foro que contesta las pregunta con una rapidez impresionante. Gracias a todos por la ayuda y a la espera de tus comentarios. Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: T0rete en 25 Abril 2011, 17:34 pm Evidentemente las unidades organizativas vienen comentadas porque tienes que poner tu la unidad tal y como la hayas creado en el AD. Y ni que decir tiene que si descomentas el código seguiría sin funcionar hasta que no crees tu la OU en tu AD.
Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 17:42 pm Es que esta línea por ejemplo viene comentada ...
Código ...y sin eso, desde el vamos no podrás obtener los atributos del AD :P Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: T0rete en 25 Abril 2011, 17:57 pm Si, descomenté el
Código: Set objADSystemInfo = CreateObject("ADSystemInfo") Código: set objUser = GetObject("LDAP://" & objADSystemInfo.UserName) Por la breve discusión que hay en la fuente(puse en enlace junto al codigo) hay mas errores. No entendi muy bien que hay que borrar del primer Dim: Citar In the first "Dim" line, I'm not sure but it doesn't appear that "dim i" needs to be in there. I removed that. ¿Es solo el dim i o el resto a partir de ahí también? Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 19:22 pm No he podido mirarlo aún, había salido a comer, aquí ahora son las 14:00 :xD
Da igual, en vbs los Dim no son necesarios, así que podrías quitar la línea entera que no afecta en nada. Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: T0rete en 25 Abril 2011, 19:27 pm Yo lo decía porque el siguiente problema que se encuentra es el bTroubleFlag y justo aparece con el dim
Citar For 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. Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 19:42 pm Esa "bandera" es una chapuza de alguien :xD , así debería de funcionar
Código
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 Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: T0rete en 25 Abril 2011, 19:55 pm 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. Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 20:12 pm 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 Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 25 Abril 2011, 20:16 pm 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
Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 20:34 pm 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 Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 25 Abril 2011, 23:09 pm 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 Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: T0rete en 25 Abril 2011, 23:21 pm 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. Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: T0rete en 25 Abril 2011, 23:23 pm efer27, ¿Has creado la OU "Printer-Groups" y has metido en ella los usuarios asociados a las impresoras?
Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 26 Abril 2011, 02:29 am 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
Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 26 Abril 2011, 09:07 am Hola a todos,
0,0 si eh creado el grupo y asocie los usuarios a la impresora y no pasa nada ejecuta normal pero el problema no lo resuelvo. bueno en verdad no se que pasa, por eso preguntaba para evitar manipular el active directory no seria mas facil crear un array para que lea desde un CSV y TXT, es una pregunta no se si sea factible. Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 27 Abril 2011, 17:15 pm Holaa todos,
revisando el programa me encuentro con un error en esta instrucción. no se que pasa que en el mensaje me sale el print count 2 alguien sabe el motivo ? Código
Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 27 Abril 2011, 17:18 pm Si, que el código que pones es para Visual Basic (VB6) y no Visual Basic Script (vbs)
Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 27 Abril 2011, 17:34 pm Dejando solo el FOR al termino de la sentencia me sale igual
Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 27 Abril 2011, 18:27 pm Hola,
Ahora me sale este mensaje al remover las impresoras erro linea 31 columna 13 source: objNetwork.RemovePrinterConnection saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 27 Abril 2011, 19:33 pm Ahora de que script estamos hablando?
Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 27 Abril 2011, 21:07 pm Hola,
El script es el que enviastes enmensajes anteriores sale el error cuando quiere eliminar. 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 Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 27 Abril 2011, 21:12 pm ok, ¿que tipo de error da? en el mensaje debe de tener una descripción.
Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 27 Abril 2011, 21:26 pm hola sale este mensaje
erro linea 31 columna 13 source: objNetwork.RemovePrinterConnection no puede quitar las impresoras de red mapeadas Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 27 Abril 2011, 21:35 pm Ahí lo tienes claramente, probablemente sea problema de permisos.
Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 28 Abril 2011, 00:52 am Hola,
ya revise los permisos y estan correcto pero no logro que el error no salga, no me elimina las impresoras que tengo mapeadas para luego agregarlas, ufff debe ser algo tonto pero no lo veo aun. saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: Novlucker en 28 Abril 2011, 02:10 am Por si acaso abre una consola con permisos de administrador, y desde ahí ejecuta el script.
Saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 28 Abril 2011, 21:00 pm Hola,
si lo ejecute con permisos pero el error continua lo que hice fue lo siguiente. Eliminar impresoras de RED strComputer = "." Set WshNetwork = WScript.CreateObject("WScript.Network") Set objShell = CreateObject("Wscript.Shell") Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colInstalledPrinters = objWMIService.ExecQuery _ ("Select * from Win32_Printer") For Each objPrinter in colInstalledPrinters if InStr(objPrinter.Name, "\\")> 0 then WshNetwork.RemovePrinterConnection objPrinter.Name end if Next Ahora me falta agregarlas. eh estado probando que leea desde un archivo plano pero no puedo lograrlo es decir tengo el siguiente txt. ouprueba1 \\server\printer ouprueba2 \\server\printer ouprueba3 \\server\printer quiero que leea este archivo y lo compare con las ou que tengo en el active directory si pertenece el ou comparando con el txt que agregue la impresora. a ver si me puedes ayudar yo sigo probando y te comento mis avances. saludos Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 28 Abril 2011, 22:18 pm Hola,
eh estado revisando y es lo que tengo hasta el momento en algo me equivoco al momento de conectar Elimina correctamente, hace el array pero no puedo agregarlo a ver si alguien me ayuda. Gracias por la pasciencia. ------------------------------------------------------------------------- '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 strNetworkPath = "C:\Copia de impresoras1.txt" '-----------------------------------------------------------------------------' Eliminar impresora '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 '--------------------------------------------------------------------------------' Conectar impresoras 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 Título: Re: Mapeo de impresoras en red por usuarioa Publicado por: efer27 en 1 Mayo 2011, 12:01 pm Hola,
Alguien me puede ayudar ?? |