En este artículo voy a mostrarte un script de diagnóstico para saber si tu impresora está compartida correctamente para que puedas imprimir en ella usando mi plugin de impresión ESC POS

Algunos usuarios reportan el error \\DESKTOP-1UDS2QP\POS-80: Access is denied. o No se encuentra el nombre de red especificado, mismo que significa que la impresora no ha sido compartida o que no está conectada físicamente por USB.

Entonces para diagnosticar ese tipo de problemas he desarrollado este script de PowerShell que nos permite saber si la impresora ha sido compartida, si es genérica y también conocer el nombre de la misma.

Con esto podemos saber si el problema está en la impresora, en su nombre o en su estado compartido.

Script de PowerShell

Abrimos Windows PowerShell buscándolo en el menú de inicio de Windows. Una vez dentro vamos a ejecutar el siguiente código cambiando el valor de $nombreImpresora por el nombre de la impresora que el usuario supuestamente ya ha configurado y compartido:

Write-Output $env:COMPUTERNAME
Get-Printer | Where-Object {$_.Shared -eq $true}
$nombreImpresora = "MiImp"
$bytes = [byte[]](
    0x48,0x6F,0x6C,0x61,0x20,0x6D,0x75,0x6E,0x64,0x6F,0x0A,  
    0x53,0x61,0x6C,0x74,0x6F,0x0A                           
)

$hostnameBytes = [System.Text.Encoding]::ASCII.GetBytes($env:COMPUTERNAME + "`n")
$bytes += $hostnameBytes

$path = "$env:TEMP\escpos.bin"
[IO.File]::WriteAllBytes($path, $bytes)

cmd /c "copy /b $path \\$env:COMPUTERNAME\$nombreImpresora"

Eso nos dará mucha información, para empezar nos va a mostrar el hostname, mismo que nos permitirá saber si no se está intentando imprimir en red.

Después con Get-Printer obtenemos la lista de impresoras compartidas. Eso nos permite detectar si el nombre de la impresora es realmente el que se está especificando así como si la impresora está conectada e instalada.

Finalmente vamos a ver si la impresora ha sido instalada como genérica y si es compatible con los comandos ESC POS enviándole algunas operaciones usando ese protocolo.

En mi caso me dice:


PS C:\Users\parzibyte> Write-Output $env:COMPUTERNAME
LAPTOP-3T1ON1MO
PS C:\Users\parzibyte> Get-Printer | Where-Object {$_.Shared -eq $true}

Name                           ComputerName    Type         DriverName                PortName        Shared   Publishe
                                                                                                               d
----                           ------------    ----         ----------                --------        ------   --------
MiImp                                          Local        Generic / Text Only       USB003          True     False


PS C:\Users\parzibyte> $nombreImpresora = "MiImp"
PS C:\Users\parzibyte> $bytes = [byte[]](
>>     0x48,0x6F,0x6C,0x61,0x20,0x6D,0x75,0x6E,0x64,0x6F,0x0A,
>>     0x53,0x61,0x6C,0x74,0x6F,0x0A
>> )
PS C:\Users\parzibyte>
PS C:\Users\parzibyte> $hostnameBytes = [System.Text.Encoding]::ASCII.GetBytes($env:COMPUTERNAME + "`n")
PS C:\Users\parzibyte> $bytes += $hostnameBytes
PS C:\Users\parzibyte>
PS C:\Users\parzibyte> $path = "$env:TEMP\escpos.bin"
PS C:\Users\parzibyte> [IO.File]::WriteAllBytes($path, $bytes)
PS C:\Users\parzibyte>
PS C:\Users\parzibyte> cmd /c "copy /b $path \\$env:COMPUTERNAME\$nombreImpresora"
        1 archivo(s) copiado(s).
PS C:\Users\parzibyte>

Y en la impresora se imprimió:

Hola mundo
Salto
LAPTOP-3T1ON1MO

Por lo que se demuestra que funciona correctamente. Y cuando no funcione bien, entonces podemos analizar la salida del script y ver en dónde está el error.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto