write verb variable print noun color powershell printing format

verb - powershell print variable



Powershell Out-Printer rompe el diseƱo de la columna Format-Table (1)

Estoy tratando de usar Format-Table para imprimir algunos datos de proceso. Empecé probando la salida directamente en el shell. Algo en la línea de (Get-Process es solo un sustituto de mis datos):

Get-Process | Format-Table ProcessName, Id

El problema es que la primera columna tiene algunas celdas más grandes y necesitaba configurar un formato como este:

$tableFormat = @{Expression={$_.ProcessName}; width=70}, @{Expression={$_.Handles}}; Get-Process | Format-Table $tableFormat

En ambos casos, la salida se veía bien dentro del caparazón. Este es un ejemplo con $ tableFormat:

DeviceDisplayObjectProvider 240 dllhost 198 dwm 78 explorer 1077 explorer 599 fpassist 61 Idle 0 inetinfo 409 InetMgr 314 lsass 1132 lsm 167 mqsvc 235 msdtc 152 MsDtsSrvr 165 notepad++ 249 Opc.Ua.ComServerWrapper 526 Opc.Ua.DiscoveryServer 530 OpcEnum 85 OPCSim 204 pageant 111 powershell 489 powershell_ise 442 PresentationFontCache 151 procexp 183 PROCEXP64 373 ReportingServicesService 693 services 302 smss 30 SMSvcHost 298 SMSvcHost 151

Cuando intento imprimir la tabla a la impresora predeterminada como esta

... Get-Process | Format-Table $tableFormat | lp

El resultado tiene columnas rotas (tomadas de una impresora de PDF, la salida real tiene el mismo aspecto):

Otras cosas que he intentado hasta ahora:

  • Establezca la alineación de columnas para todas las columnas explícitamente a la izquierda
  • autoSize (empeora las cosas)

Este problema podría estar relacionado con mi pregunta anterior, cuando todavía intenté formatear manualmente la tabla con pestañas. Ver: ¿Por qué Powershell Out-Printer ignora `f (página nueva) en el texto?


A primera vista, parece un problema de fuente. Puede o no serlo, pero al menos vale la pena verificarlo. En algunas fuentes, todos los caracteres tienen el mismo ancho. En otros, cada personaje puede tener un ancho único.

La interfaz de la consola a powershell normalmente usa una fuente de ancho fijo. El formato que obtiene de format-table puede suponer que todos los caracteres tienen el mismo ancho. Si imprime en una impresora con una fuente de ancho variable, obtendrá resultados como los que nos ha mostrado.

Puede verificar esto especificando de algún modo a su impresora que se debe usar una fuente de ancho fijo. "Courier" es una de esas fuentes. No puedo decirte cómo hacerlo en tu caso, porque no sé los detalles.

Si mi conjetura está en el objetivo, la especificación de una fuente de ancho fijo debería hacer que las columnas parezcan alineadas de nuevo.

Otra cosa para ver es dónde se establecen las tabulaciones.