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.

29 comentarios

  1. Buenas tardes.
    Te agradezco la ayuda. Me sirvió mucho la información, pero tengo una duda.

    Resulta que quiero imprimir en una impresora direccionada por Terminal Server, mi idea es hacer un programa en Visual Basic que se ejecute al momento en que el usuario de escritorio remoto se conecte, parte en donde ejecutaria, script que nos hiciste favor de hacer; e instale una impresora que envié a imprimir por el mismo puerto que la que redirecciono, esto es: «dos impresoras instaladas, para el mismo puerto», la razon por la cual quiero hacer esto es larga de explicar y supongo que si has trabajado con escritorios remotos te imaginaras la razón.

    Aunque ese no es el problema, el problema es que veo que solo explicas como agregar una impresora que imprima por un puerto TCP/IP y ami me gustaría agregar una que imprima por algún otro puerto, por ejemplo : USB, LPT1, o TS, principalmente, por supuesto «TS», agradezco tu respuesta, si te es posible.

    Gracias

  2. En mi caso yo tengo una carpeta compartida donde estan los controladores de la impresora, entonces debo sustituir el

    /f «.\EpsonR200\E_DF18HE.INF»

    por

    /f «.\\servidor\carpeta_con_drivers\EpsonR200\E_DF18HE.INF»

    ???

    Muchas gracias.

  3. agradezco la información, aunque creo tardarme más en crear las carpetas buscar archivos bajar drivers, enumerar puertos etc etc, que en instalarla por grupo de trabajo o ip, en fín, aún así me es valiosa la información……… Gracias !!

    Saludos 🙂

Dejar un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.