Obtener impresoras compartidas en Windows usando PHP

Introducción

Acabo de publicar una entrada sobre cómo obtener impresoras en Windows. Pues podemos modificar dicho comando para que diga si son o no compartidas, y dependiendo de eso incluirlas en un arreglo

Comando

El comando queda modificado así:

get-WmiObject -class Win32_printer |ft shared, name

Como vemos, en la otra entrada sólo obtenemos el nombre con name. En este caso también queremos ver si está compartida usando shared. Así es la salida:

Una vez que tenemos esto vamos a ir a PHP y parsear todo. Vamos a incluir sólo las que estén compartidas:

<?php
    $ruta_powershell = 'c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'; #Necesitamos el powershell
    $opciones_para_ejecutar_comando = "-c";#Ejecutamos el powershell y necesitamos el "-c" para decirle que ejecutaremos un comando
    $espacio = " "; #ayudante para concatenar
    $comillas = '"'; #ayudante para concatenar
    $comando = 'get-WmiObject -class Win32_printer |ft shared, name'; #Comando de powershell para obtener lista de impresoras
    $delimitador = "True"; #Queremos solamente aquellas en donde la línea comienza con "True"
    $lista_de_impresoras = array(); #Aquí pondremos las impresoras
    exec(
        $ruta_powershell
        . $espacio
        . $opciones_para_ejecutar_comando
        . $espacio
        . $comillas
        . $comando
        . $comillas,
        $resultado,
        $codigo_salida);
    if ($codigo_salida === 0) {
        if (is_array($resultado)) {
            #Omitir los primeros 3 datos del arreglo, pues son el encabezado
            for($x = 3; $x < count($resultado); $x++){
                $impresora = trim($resultado[$x]);

                # Ignorar los espacios en blanco o líneas vacías
                if (strlen($impresora) > 0) {
                    # Comprobar si comienzan con "True", para ello usamos el delimitador declarado arriba
                    if (strpos($impresora, $delimitador) === 0){

                        #Limpiar el nombre
                        $nombre_limpio = substr($impresora, strlen($delimitador) + 1, strlen($impresora) - strlen($delimitador) + 1);


                        #Finalmente agregarla al array
                        array_push($lista_de_impresoras, $nombre_limpio);
                    }
                }
            }
        }
        echo "<pre>";
        print_r($lista_de_impresoras);
        echo "</pre>";
    } else {
        echo "Error al ejecutar el comando.";
    }
?>

Con eso tenemos para obtener la lista de impresoras compartidas. Esto es útil por ejemplo cuando queremos imprimir un ticket en una impresora térmica, ya que la librería dice que dicha impresora debe estar compartida.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

1 comentario en “Obtener impresoras compartidas en Windows usando PHP”

  1. Pingback: Obtener lista de impresoras compartidas en Windows usando Golang - Parzibyte's blog - El blog de Luis Cabrera

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *