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 impresorasexec($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 encabezadofor($x=3;$x<count($resultado);$x++){$impresora=trim($resultado[$x]);# Ignorar los espacios en blanco o líneas vacíasif(strlen($impresora)>0){# Comprobar si comienzan con "True", para ello usamos el delimitador declarado arribaif(strpos($impresora,$delimitador)===0){#Limpiar el nombre$nombre_limpio=substr($impresora,strlen($delimitador)+1,strlen($impresora)-strlen($delimitador)+1);#Finalmente agregarla al arrayarray_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.
Introducción Trabajando en un proyecto con Go, tuve que obtener la lista de impresoras compartidas en Windows. Básicamente hacer lo mismo que ya hice aquí con PHP. Ahora le tocó el turno a Go, y aunque al principio no fue fácil, lo conseguí. Hace falta mencionar que utilicé un método…
Introducción Puede que en algún momento necesitemos obtener qué impresoras se encuentran disponibles para, obviamente, imprimir. En esta ocasión veremos cómo obtener dicha lista usando el maravilloso lenguaje PHP y el powershell de Windows. Tranquilo, que no es nada complicado. Nota: obviamente esto sólo funciona en Windows, y sólo si…
Hace algún tiempo te mostré cómo imprimir tickets en impresora térmica con PHP puro usando la maravillosa librería de Mike42, ahora te mostraré cómo hacerlo e integrarlo dentro del framework Laravel. Al final vamos a imprimir un ticket usando Laravel, desde una ruta que va a invocar a un controlador.…
En "laravel"
1 comentario en “Obtener impresoras compartidas en Windows usando PHP”
Pingback: Obtener lista de impresoras compartidas en Windows usando Golang - Parzibyte's blog - El blog de Luis Cabrera