Instalar impresoras de forma desatendida mediante un archivo de proceso por lotes

Algo que encuentro extremadamente tedioso y aburrido es tener que instalar los controladores de impresora en los ordenadores. Y es aún peor cuando éstas impresoras son impresoras de red, ya que el proceso se dilata al tener que crear el puerto de impresión TCP/IP.

Pues después de un poco de búsquedas por el Google y repasando lo que había aprendido con la instalación de drivers por línea de comandos, he terminado haciendo unos archivos de proceso por lotes que automatizan totalmente, y de forma desatendida la instalación completa de cualquier impresora.

Lo primero que necesitamos son los controladores de la impresora en formato INF. Normalmente los que te descargas de internet lo son, y sólo tienes que desenpaquetarlos. Crea una carpeta y nómbrala como te parezca mejor (yo la he llamado AutoPrinter). Dentro, copia las carpetas de los controladores de cada una de las impresoras que vayas a instalar, que por tu comodidad mejor que en el primer nivel esté el archivo INF. Si vas a necesitar crear puertos TCP/IP, crea una carpeta dentro que se llame «puertos».

Ahora crearemos en la carpeta un archivo con extensión CMD o BAT al que le pondremos el nombre que querramos (autoprinter.cmd, por ejemplo).

Y aquí empieza el proceso que repetiremos para cada impresora:

Si la impresora se conecta a por TCP/IP usando un servidor de impresión dedicado o es una impresora que se conecta directamente a la red, seguiremos estos pasos:

Creamos un archivo vbs dentro de la carpeta puertos, usando el bloc de notas. El nombre puede ser algo así como IP201_P9100.vbs, siendo 201 el último número de la dirección IP del servidor de impresión y 9100. El contenido será el siguiente:

Set objWMIService = GetObject("winmgmts:")
Set objNewPort = objWMIService.Get _
("Win32_TCPIPPrinterPort").SpawnInstance_
objNewPort.Name = "IP_192.168.0.201_0"
objNewPort.Protocol = 1
objNewPort.HostAddress = "192.168.0.201"
objNewPort.PortNumber = "9100"
objNewPort.SNMPEnabled = False
objNewPort.Put_

Del contenido se tiene que modificar lo que está en azul.

El primer dato es el nombre del puerto. Puedes usar cualquier texto, pero es mejor si usas un texto identificativo. Este dato luego lo necesitarás en el paso de la instalación de la impresora.

El segundo dato es la dirección IP o el nombre del dispositivo.

El tercer dato es el puerto en el que está conectada la impresora. Normalmente es el 9100 si sólo hay una impresora, o si es un servidor de impresión de varias impresoras 9100 será el primer conector, 9101 el segundo y así cada puerto.

Aunque es poco provable, puede que tengas que modificar algún otro dato, pero todo es bastante autoexplicativo.

Guardamos el archivo vbs y lo cerramos.

Ahora volvemos al archivo de proceso por lotes y escribimos una línea para llamar al archivo vbs que acabamos de crear:

cscript .\puertos\IP201_P9100.vbs

Cambia el nombre del archivo vbs a como lo hayas nombrado.

Ahora seguimos instalando la impresora en si:

Abrimos el archivo INF del controlador y localizamos la cadena que identifica al modelo exacto de la impresora.

Este es un extracto de lo que te puedes encontrar en el INF de una Epson Stylus Photo R200:

[EPSON]
"EPSON Stylus Photo R200 Series" = EPNDRV,USBPRINT\EPSONStylus_Photo_R2C5C0
"EPSON Stylus Photo R200 Series" = EPNDRV,LPTENUM\EPSONStylus_Photo_R2C5C0

Obviamente el nombre que estamos buscando es «Epson Stylus Photo R200 Series». Copiamos esa cadena y añadimos al archivo de proceso por lotes la siguiente cadena (en una sóla línea):

rundll32 printui.dll,PrintUIEntry /if /b "EPSON Stylus Photo R200"
/f ".\EpsonR200\E_DF18HE.INF" /r "IP_192.168.0.201_1"
/m "EPSON Stylus Photo R200 Series"

El primer dato es el nombre que tendrá la impresora cuando la visualicemos en la carpeta de impresoras. Puedes poner lo que quieras, no tiene demasiada importancia.

El segundo dato es la ruta en la que se encuentra el archivo INF de los controladores de la impresora. Ten en cuenta que es importante que añadas el primer punto y la contrabarra.

El tercer dato es el nombre del puerto. En este caso es un puerto TCP/IP, pero si fuera una impresora local conectada por ejemplo al primer puerto paralelo, pondríamos «LPT1:», y si es una impresora compartida de otro equipo, pondríamos la ruta correspondiente, por ejemplo «\\servidor\EpsonR200»

El cuarto dato es el nombre exacto de la impresora que hemos copiado antes de dentro del archivo INF. Tanto esta cadena como la que referencia el puerto, es importante que esté escrita exactamente igual en las dos partes en las que aparece.

Si hay más impresoras, volvemos a repetir todo el proceso. Si ya no hay más, guardamos el archivo de proceso por lotes y ya podemos ejecutarlo en todos los ordenadores que queramos.

Notas:

  • No pasa nada si el puerto que estamos creando ya existe, aunque no estoy seguro de si los datos que quedan son los nuevos o los antiguos.
  • Si ya existe una impresora con el mismo nombre se instala igualmente, sustituyendo la anterior y actualizando los datos a los de la nueva instalación.
  • El proceso es automático y no requiere ninguna acción por parte del usuario, excepto en el caso de que algún controlador de impresora no esté firmado. Por cada controlador que no esté firmado, al usuario se le presentará la ventana de «continuar igualmente» o «detener instalación» y no continuará hasta que se seleccione una u otra opción.

Tags: , , ,

30 Responses to “Instalar impresoras de forma desatendida mediante un archivo de proceso por lotes”

  1. jack dice:

    bueno tu explicacion esta bien pero tengo un problema sin solo quiero cear un puerto local de impresora en mi equipo

  2. Spyd dice:

    Para Jack:

    Si sólo quieres crear los puertos, puedes usar sólamente el (o los) archivo VBS y crear un archivo CMD con sólo las llamadas al cscript.

  3. Humberto dice:

    estimado sabe he realizado paso a paso su instructivo y no me da resultado, me arroja un error » argumentos no validos» tu puedes enviarme los archivos que creaste como para generar el mio basandome en los que ya funcionan, tengo que realizar una instalación de 500 impresorasdivididas en 2000 usuarios.
    saludos

  4. Spyd dice:

    Humberto:
    Puedes descargar mi archivo desde este enlace: http://www.brainrage.com/autoprinter.zip
    De los drivers, sólo contiene el archivo INF de cada uno de ellos, así que no podrás ejecutarlo, pero te puedo garantizar que funciona perfectamente.
    El archivo adjunto incluye ejemplos de como:
    -Borrar impresoras
    -Crear puertos
    -Instalar drivers (aunque no es necesario)
    -Instalar impresoras de red puras (no compartidas)
    -Instalar impresoras compartidas
    -Establecer una impresora por defecto.
    En el archivo adjunto, antes de instalar las impresoras las borro todas porque así puedo usar ese mismo archivo tanto para instalar en equipos nuevos como para actualizar los drivers en equipos en los que ya lo he usado.

  5. Seba dice:

    Estimado te comento que no he podido hacer funcionar tu solucion a este gran problema. Me arroja el mismo error que al amigo de arriba (ya descargue tu archivo). Podemos estarnos equivocando en algo muy comun?

    Saludos.-

  6. Spyd dice:

    Seba/Humberto: Ejecutad el archivo línea por línea y decidme en qué linea está fallando y cuál es el error exactamente.

  7. monse dice:

    Hola!!! yo teno un mega problema… la computadora no reconoce mi impresora.. la impresora es modelo SAMSUNG ML-2510 cuando trato de instalar el driver… me sale un cuadro de dialogo que dice » ERROR.. ARGUMENTO NO VALIDO» que debo hacer????

  8. Juan dice:

    He probado la solucion Propuesta por el amigo Spyd, y funciona a la perfeccion, en mi caso tube que modificar algunas lineas del .inf ya que debido a unas lineas demas me estaba dando error. Por ahora estoy tratando de averiguar como dejar establecido como predeterminado el tamaño carta cuando el driver se instala.

    Saludos

    Mil Gracias Spyd.

  9. Spyd dice:

    Juan: Gracias por tus comentarios. Si encuentras el método para establecer configuraciones por línea de comandos, compártelo aquí y lo añadiré al post.

  10. Adrian dice:

    Estimado, me funciono a la perfeccion el scrip, ahora quiero agregar una impresora que windows ya tiene integrados los drivers, y lo que quisiera saber es como levantar el driver de la impresora desde windows xp. El driver es «Minolta Pi3500». Desde ya muchas gracias!

  11. Spyd dice:

    Adrian: No se a qué te refieres con «levantar» el driver. Si necesitas el driver, lo mejor es que te lo descargues de la página web oficial. Si por alguna razón no puedes conseguirlo, entonces está mucho más difícil la cosa, pero en c:\Windows\inf debería estar el archivo INF. El resto de archivos necesarios estarán repartidos por las carpetas de Windows, y en algunos casos también en la carpeta de Archivos de Programa; puedes encontrar sus rutas dentro del archvo inf. Para localizar cuál es el archivo inf, usa algún programa que te permita búsqueda textual dentro de archivos, como por ejemplo el PSPad, y busca el nombre de la impresora.

  12. Adrian dice:

    Ya encontre lo que buscaba, me habia expresado mal, era la ruta del .inf donde contenia la inpresora minolta! muchas gracias!!

  13. Juanma dice:

    tengo un problema a la hora de poner una impresora predeterminada, no su muy bien como escribir la linea de comando.

  14. Spyd dice:

    Juanma:

    Para establecer una impresora compartida en otro equipo, usa esta línea de comandos:
    rundll32 printui.dll,PrintUIEntry /y /n\\Equipo\NombreCompartido

    Para una impresora físicamente conectada o conectada a través de red, usa esta (aunque no la he probado):
    rundll32 printui.dll,PrintUIEntry /y /b «Nombre de la impresora»

    Puedes sacar más información de este enlace: http://download.microsoft.com/download/8/2/c/82cffcfa-56f6-4fc3-bfa5-80cd84793871/PrintUIUsersGuide.doc

  15. Juanma dice:

    Muchas gracias, todo solucionado

  16. Esteve dice:

    Buenas gran script! pero me da el siguiente error ” argumentos no validos” cuando ejecuta esta liniea:

    rundll32 printui.dll,PrintUIEntry /if /b «Canon LBP3360 ImpSi» /f «c:\AutoPrinter\drivers\P52KSAL.inf» /r «IP_impsi_0» /m «Canon LBP3360 PCL5e»

    Anteriormente he visto este problema lo solucionasteis?

    Gracias!

  17. METALMEN dice:

    el argumento no valido que tienes es el /b ….

  18. yohnny dice:

    buenos dias me podrias ayudar a crearr un .bat o cmd para agregar una impresora que esta compartida via usb en un pc con una direcion ip .192.168.24.47 y su nonbre es siempre2pc por que tengo un problema con windows 7 ya que al agregar la impresora todo funciona bien pero al reiniciarla me aparece sin conexion y tengo que agregarla manualmente… Todos estos equipos estan en ambiente win7 32 bits

  19. yohnny dice:

    me puedes agregar y compartir solucones

  20. Rodolfo dice:

    Estimados, mi caso es el siguiente tengo una epson R200 instalada en una maquina con window XP (funciona muy bien) y tengo otra maquina con Window 7 a la cual tuve que reinstalarle el sistema operativo (nuevamnte W7) cunado quise compartir nuevamente la impresora me salta un error donde me pide en principio el archivo .INF de la impresora y con la instalacion anterior no me pidio nada de eso y la compartio perfectamente.si alguien me puede dar una mano con esto se los agradeceria
    Muchas gracias

  21. nestor dice:

    Hola Como andan bueno mi problema es q un amigo me presto una impresora Samsung ML-2010 y no puedo istalar el sofware para q me ande Me salta un error «Argumentos no validos» siempre q quiero istalarlo me sale eso nose porq aluien me puede ayudar

  22. Rene dice:

    Eres un maestro…lo probare y te dire como anda…Muchas Gracias!!

  23. Rene dice:

    Hola tengo una duda como le hago si el puerto es LPR y no RAW ?? Gracias

  24. Spyd dice:

    Rene: Cambia en el VBS la línea

    objNewPort.Protocol = 1

    1 es RAW
    2 es LPR.

    Puedes ver más opciones del puerto en esta web: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394492(v=vs.85).aspx

Leave a Reply