Gestión avanzada de impresoras en red con printui.dll y PowerShell

Última actualización: 29/10/2025
Autor: Isaac
  • PrintUIEntry permite instalar y listar conexiones globales por equipo; combínalo con PowerShell y Registro para auditar sin GUI.
  • WMI y WScript.Network cubren mapeo, listado y predeterminadas; el inventario por IP se resuelve con consultas a puertos TCP/IP.
  • Despliega servidores de impresión por PowerShell con controladores, puertos y colas compartidas de forma reproducible.
  • UniversalPrintManagement añade gestión cloud con cmdlets, permisos, conectores, trabajos e informes con paginación robusta.

Administración de impresoras en red con PowerShell

Cuando toca administrar un parque de impresoras en red en entornos Windows, mezclar printui.dll con PowerShell se convierte en una jugada ganadora. Aun así, el día a día nos deja casuísticas curiosas: conexiones por equipo con /ga que no aparecen en los cmdlets habituales, errores 740 al instalar desde cuentas estándar y listados que solo salen por una ventana gráfica. Aquí tienes una guía práctica y profunda para que todo esto deje de ser un quebradero de cabeza.

Todo lo que verás a continuación está enfocado a plataformas Windows, con recetas que funcionan en cliente y servidor y que además escalan muy bien. Verás desde cómo listar y mapear impresoras con WMI o el objeto COM de WSH hasta desplegar un servidor de impresión por PowerShell, pasando por Universal Print y sus cmdlets modernos. Y por el camino, soluciones reales a problemas reales como capturar las conexiones globales que instala PrintUI con /ga o saltarse los típicos bloqueos de UAC.

PrintUIEntry: conexiones por equipo, listados y errores habituales

PrintUIEntry para gestión de impresoras

El motor de instalación clásico de impresoras en Windows expone el punto de entrada PrintUIEntry en printui.dll. Esto permite realizar acciones como instalar colas para todos los usuarios del equipo con /ga, listar esas colas con /ge o registrar controladores y conexiones de forma silenciosa. Una orden típica de despliegue global sería: rundll32 printui.dll,PrintUIEntry /q /ga /n\\PRINTSERVER\PRINTERNAME, que deja esa impresora disponible a cualquier usuario que inicie sesión en esa máquina.

El problema llega al intentar inventariar esas conexiones. Herramientas como Get-Printer o la clase Win32_Printer de WMI no muestran las impresoras agregadas con /ga, y el único comando que las enumera es rundll32 printui.dll,PrintUIEntry /ge /c «\\NombreEquipo». El inconveniente es que este listado sale en una ventana GUI; para alternativas automatizadas, consulta cómo escanear dispositivos conectados a la red, que ofrece métodos para detección sin interfaz gráfica.

Para evitar fricciones con UAC al instalar controladores en estaciones donde el usuario no es admin, existe un truco útil: desde un CMD elevado puedes ejecutar rundll32 printui.dll,PrintUIEntry /il. Con ello se registra el driver en el sistema a nivel de administrador y, a partir de ahí, el usuario podrá añadir la impresora desde Configuración o Panel de control sin tropezar con el famoso error 740. Muchos técnicos se han topado con ese mensaje al desplegar colas de fabricantes; este método suele desbloquear la situación (ver solución de problemas comunes de impresoras).

Si quieres automatizar el inventario de impresoras instaladas con /ga sin depender de la interfaz gráfica, una estrategia práctica consiste en consultar las claves de registro del sistema donde Windows guarda las conexiones por equipo. Puedes hacerlo de forma remota con PowerShell y, con los nombres recuperados, completar la ficha (controlador, puerto, etc.) consultando el servidor de impresión correspondiente. En casos en que Windows no detecta la impresora conectada conviene combinar esos datos con diagnósticos locales y remoto para obtener contexto. Un ejemplo de enfoque sería este:

# Lee conexiones globales en un equipo remoto y devuelve nombre de servidor y cola
$computers = @("PC01","PC02")
Invoke-Command -ComputerName $computers -ScriptBlock {
    $key = "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Connections"
    if (Test-Path $key) {
        Get-ChildItem $key | ForEach-Object {
            # Los subnombres suelen incluir \\Servidor,Impresora compartida
            $parts = $_.PSChildName -split ","
            @{
                Server   = $parts
                Printer  = if ($parts.Count -gt 1) { $parts } else { $null }
                Source   = "PrintUI /ga"
            }
        }
    }
}

Con los pares Servidor/Impresora en la mano, puedes consultar el servidor de impresión para extraer datos técnicos como el controlador o el puerto: Get-Printer -ComputerName PRINTSERVER -Name "PRINTERNAME" | Select-Object Name,DriverName,PortName,Shared,Published. Este patrón permite hacer auditorías completas de las colas instaladas mediante PrintUI /ga en cientos de equipos de forma reproducible.

  ¿Qué es un archivo LNK en Windows y cómo funciona?

Administración con PowerShell clásico (WMI y WScript.Network)

WMI y WScript.Network para impresoras

Para listar las impresoras visibles en un equipo, la vía más directa es consultar la clase Win32_Printer. En PowerShell moderno conviene usar CIM: Get-CimInstance -ClassName Win32_Printer. Obtendrás colas locales y conectadas por usuario con propiedades ricas (si es predeterminada, si está compartida, etc.).

Otra opción es el objeto COM de WSH WScript.Network, que expone EnumPrinterConnections(). Este método devuelve una colección simple con pares de puerto y nombre de dispositivo sin etiquetas, algo más crudo de interpretar, pero efectivo para scripts rápidos: (New-Object -ComObject WScript.Network).EnumPrinterConnections().

Para añadir una impresora de red al perfil del usuario, la propia interfaz COM es muy útil. Basta con llamar a AddWindowsPrinterConnection así: (New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\\\Printserver01\\Xerox5"). Si lo que buscas es tocar la impresora por defecto, puedes hacerlo de dos maneras: con WMI localizando la cola y usando SetDefaultPrinter, o con la comodidad de WScript.Network.SetDefaultPrinter pasando el nombre de la impresora, siguiendo los pasos para configurar tu impresora predeterminada.

# Establecer como predeterminada con WMI
$p = Get-CimInstance -ClassName Win32_Printer -Filter "Name='HP LaserJet 5Si'"
Invoke-CimMethod -InputObject $p -MethodName SetDefaultPrinter

# Establecer como predeterminada con WScript.Network
(New-Object -ComObject WScript.Network).SetDefaultPrinter('HP LaserJet 5Si')

Para quitar una conexión de usuario, el mismo objeto COM ofrece RemovePrinterConnection: (New-Object -ComObject WScript.Network).RemovePrinterConnection("\\\\Printserver01\\Xerox5"). Esta pareja COM + WMI cubre la mayoría de tareas “clásicas” de administración de colas a nivel de perfil y equipo.

Cuando quieres ir un paso más allá y hacer inventario por IP de las impresoras conectadas mediante puertos TCP/IP, una función de utilidad es Get-TCPIPPrinter. La idea es sencilla: consultar Win32_TCPIPPrinterPort para obtener los puertos y, con cada uno, localizar su impresora asociada en Win32_Printer. El resultado incorpora campos adicionales como la IP del puerto, si responde a ping y el equipo origen. Esta función acepta ComputerName por canalización y credenciales alternativas.

# Ejemplos de uso de Get-TCPIPPrinter (concepto)
Get-TCPIPPrinter                         # Equipo local, impresoras por TCP/IP
Get-TCPIPPrinter -ComputerName EQUIPO1   # Equipo remoto por nombre
"PC1","PC2" | Get-TCPIPPrinter         # Lista de equipos por pipeline

# Con credenciales y exportando a CSV
$cred = Get-Credential
Get-Content C:\\Equipos.txt | Get-TCPIPPrinter -Credential $cred | Export-Csv C:\\Prn.csv -NoTypeInformation

Este enfoque WMI es robusto y muy útil para auditoría: te permite levantar un inventario fiable de colas que escuchan por IP, añadir metadatos operativos (latencia o respuesta a ping) y exportarlo para su análisis. Si te interesa replicar la función, la mecánica clave es la consulta a Win32_TCPIPPrinterPort en root/CIMv2, el filtrado por PortName en Win32_Printer y la gestión de errores con Try/Catch cuando el destino exige o rechaza credenciales.

  ¿Tienes problemas con Windows 10 CTF Loader? Arréglalos inmediatamente

En despliegues con Directorio Activo, un patrón muy habitual es mapear impresoras por departamento. Con PowerShell puedes leer el atributo department del usuario que inicia sesión y cruzarlo con el atributo location de las colas publicadas en AD. Si coinciden, se mapea la impresora sobre la marcha para el usuario. A continuación tienes un guion que resume el proceso:

function Mapear-Impresora($ruta) {
    $net = New-Object -ComObject WScript.Network
    $impresoras = $net.EnumPrinterConnections()
    if ($impresoras -like $ruta) { $net.RemovePrinterConnection($ruta, $true) }
    $net.AddWindowsPrinterConnection($ruta)
}
# Usuario actual
$usuario = $env:USERNAME
$filtro = "(&(objectCategory=User)(samAccountName=$usuario))"
$buscador = New-Object System.DirectoryServices.DirectorySearcher
$buscador.Filter = $filtro
$objUser = $buscador.FindOne().GetDirectoryEntry()
# Todas las colas publicadas
$filtroPrn = "(&(objectCategory=PrintQueue))"
$buscador = New-Object System.DirectoryServices.DirectorySearcher
$buscador.Filter = $filtroPrn
$colas = $buscador.FindAll()
# Mapeo por coincidencia Location vs Department
for ($n=0; $n -lt $colas.Count; $n++) {
    if ($colas.Properties.location -eq $objUser.Properties.department) {
        Mapear-Impresora -ruta $colas.Properties.uncname
    }
}

Esta lógica funciona genial como script de inicio mediante GPO, porque asegura que cada persona recibe automáticamente las colas de su área sin intervención manual y con total consistencia en todo el dominio. Para facilitar el acceso, puedes crear un acceso directo a dispositivos e impresoras que ayude a los usuarios a localizar sus colas locales.

Gestión moderna: servidor de impresión con PowerShell y Universal Print

Servidor de impresión y Universal Print

Si administras un servidor Windows y necesitas estandarizar el servicio de impresión, PowerShell permite desplegar el rol, cargar drivers y publicar colas de forma repetible. En Windows Server 2022 (válido también en 2016 y 2019), el rol se instala con: Install-WindowsFeature -Name Print-Server. Tras ello, suele ser recomendable reiniciar el servidor para asentar los cambios: Restart-Computer.

El siguiente paso es tener el driver adecuado en el sistema. Lo ideal es descargar la versión más reciente del fabricante y probarla antes en un entorno de pruebas. Para inyectar el INF, usa pnputil.exe -i -a "C:\\Ruta\\al\\driver.inf". Verifica que los contadores Total attempted y Number successfully imported coinciden. Con el INF cargado, registra el controlador en el spooler con Add-PrinterDriver -Name "HP Universal Printing PCL 6". Si trabajas con modelos HP, la guía para configurar impresora HP en red inalámbrica puede servir como referencia práctica para validar conectividad y drivers.

Ahora crea el puerto TCP/IP estándar para la IP de la impresora: Add-PrinterPort -Name "10.1.1.123" -PrinterHostAddress "10.1.1.123". Y por último, define la cola compartida con su driver y puerto, publicándola si quieres que aparezca en AD: Add-Printer -Name "HP-UP PCL6" -DriverName "HP Universal Printing PCL 6" -Shared -ShareName "HP-UP PCL6" -PortName "10.1.1.123" -Published. Puedes validar el resultado con Get-Printer y comprobar que todo está en orden.

Aunque la impresión no sea el servicio más “glamuroso” del CPD, sigue siendo clave para facturas e informes en muchos entornos. Automatizar estos pasos con scripts te ahorra horas y, sobre todo, elimina discrepancias entre servidores. Además, si combinas estas técnicas con las conexiones globales de PrintUI (/ga), puedes garantizar que las estaciones siempre verán las colas corporativas que necesitas, sin depender de acciones manuales de los usuarios.

En escenarios cloud o híbridos, Microsoft ofrece el módulo de PowerShell UniversalPrintManagement para gestionar Universal Print. Se instala con Install-Module UniversalPrintManagement. La primera vez que uses PSGallery, PowerShell avisará de que es un repositorio no confiable; responde “Yes” o “Yes to All” para continuar. Para desinstalar, basta con Uninstall-Module -Name UniversalPrintManagement.

Una vez instalado, inicia sesión con Connect-UPService, que abre un diálogo para autenticación con tu cuenta de Azure. Los cmdlets siguen la convención VERB-NOUN y usan el prefijo UP. Puedes descubrir comandos con Get-Command -Verb Get -Module UniversalPrintManagement y consultar ayuda detallada, por ejemplo, con Get-Help Get-UPPrinter -Detailed.

Ten en cuenta un matiz importante: los cmdlets Get-* del módulo devuelven resultados paginados mediante tokens de continuación. Por eso, se recomienda almacenar la respuesta en una variable y acceder a .Results para manejar colecciones grandes o reintentos. Este modelo mejora la resiliencia ante cortes de red o timeouts en entornos con muchas impresoras.

  Requisitos para instalar Windows 11: guía completa y actualizada

El repertorio de comandos cubre varias áreas: para impresoras tienes Get-UPPrinter y Remove-UPPrinter; para propiedades, Set-UPPrinterProperty; para recursos compartidos, New-UPPrinterShare, Get-UPPrinterShare, Remove-UPPrinterShare y Set-UPPrinterShare. La gestión de permisos la abarcan Grant-UPAccess, Revoke-UPAccess y Get-UPAllowedMember para revisar quién tiene acceso a imprimir.

Los conectores (para integrar impresoras locales con Universal Print) se administran con Get-UPConnector, Remove-UPConnector y Set-UPConnectorProperty. Para el seguimiento operativo, puedes consultar Get-UPPrintJob y extraer informes de uso con Get-UPUsageReport. Este conjunto te permite orquestar la plataforma desde scripts y automatizar tareas recurrentes a gran escala.

Como ves, el ecosistema de impresión en Windows abarca desde la vieja escuela de WMI y COM hasta la capa cloud de Universal Print, pasando por el motor de instalación de printui.dll. Con un puñado de patrones sólidos, puedes cubrir desde el mapeo por usuario y el inventario por IP hasta el despliegue industrial de colas en servidores y el control de permisos en la nube.

Para terminar, una pauta operativa que merece la pena: cuando la visibilidad sea tu prioridad, combina la consulta del Registro para listar conexiones por equipo (/ga) con CIM/WMI para extraer detalles técnicos y, si trabajas con Universal Print, absorbe los resultados paginados en variables antes de procesarlos. Con esta mezcla tendrás listados completos, consistentes y fáciles de explotar en informes o paneles.

El objetivo de todo lo anterior es que puedas pasar de “cada PC va a su aire” a un entorno controlado: drivers instalados de forma silenciosa para esquivar el error 740, colas desplegadas desde PowerShell con puertos y controladores conocidos, mapeos automáticos por departamento y, cuando toque, gestión centralizada en Universal Print con cmdlets que hablan el lenguaje del día a día de un administrador.

Dominar estas piezas te permite trabajar con más calma y menos improvisación: printui.dll para implantar a nivel de equipo, PowerShell clásico para tareas locales y remotas, y Universal Print para escalar y auditar en la nube. Sea cual sea tu punto de partida, tienes herramientas de sobra para dejar tu plataforma de impresión fina, estable y bien documentada.

eliminar y agregar una impresora en windows 11-6
Artículo relacionado:
Cómo compartir una impresora en red en Windows 11 paso a paso