Un mejor visor de cuadrículas de PowerShell WPF
Hace un tiempo agregué un comando llamado ConvertTo-WPFGrid en mi módulo PSScriptTools. Quería algo similar a Out-Gridview pero hecho en formato WPF. La versión inicial estaba bien y hacía el trabajo, pero siempre parecía deficiente. Creo que la nueva versión del comando ha mejorado mucho. Quería tomarme unos minutos y mostrarles un juguete nuevo y brillante.
Tamaño automático
La versión original del comando le permite especificar las dimensiones de la forma final. La versión actual ajustará automáticamente el tamaño del formulario según el tamaño del control de cuadrícula de datos. En general me gusta este enfoque. Aunque el código que estoy usando puede mostrar brevemente un formulario en blanco antes de cambiar el tamaño de todo. Y ya no puedo tener el centro automático del formulario en la pantalla. Tengo algunos problemas abiertos sobre estos elementos en el repositorio de Github y eventualmente los abordaré.
Autorefrescar
La versión anterior tenía un parámetro de tiempo de espera que cerraría automáticamente el formulario después de un número de segundos especificado por el usuario. Esa característica permanece. Pero he ido un paso más allá. Si escribe una expresión de PowerShell de una línea que se canaliza a ConvertTo-WPFGrid, la función analizará el comando para crear un bloque de script de todo el código que conduce a ConvertTo-WPFGrid. Ahora, si usa -Refresh y -Timeout, los datos se actualizarán en ese intervalo.
Get-VM | Select Name,State,CPUUsage,@{Name="MemAssignedMB";Expression = {$_.MemoryAssigned/1MB -as [int]}},@{Name="MemDemandMB";Expression={$_.MemoryDemand/1MB}},@{Name="Runtime";Expression= { "{0:dd\.hh\:mm\:ss}" -f $_.Uptime}} | ConvertTo-WPFGrid -Title "VM Status" -Refresh -Timeout 20
Para que esto funcione, el comando debe ser una expresión larga canalizada. No funcionará con mensajes anidados o si interrumpes el comando en un | en PowerShell ISE.
Esto ofrece fantásticas posibilidades.
Podría crear un script de una línea para crear una pequeña herramienta de monitoreo.
Get-Volume -CimSession (get-content c:\work\names.txt) | Where-Object {$_.DriveLetter -AND $_.DriveType -eq 'fixed'} | Select-object @{Name="Server";Expression={$_.PSComputername.toUpper()}},DriveLetter,HealthStatus,FileSystemLabel,@{Name="SizeGB";Expression={[int]($_.Size/1GB)}},@{Name="PctFree";Expression = {($_.sizeremaining/$_.size)*100}} | ConvertTo-WPFGrid -Title "DiskStatus" -Refresh -Timeout 60
Espacio de ejecución en segundo plano
Esto es posible porque el nuevo formulario se ejecuta en un espacio de ejecución separado, lo que significa que el mensaje de PowerShell ya no está bloqueado. Sin embargo, esto también significa que los scripts de su perfil no se cargan, por lo que no se cargará nada en lo que confíe para obtener los datos de visualización. Ésa es otra cuestión que tendré que abordar. Relacionado con esto es que cuando cierras la cuadrícula, el espacio de ejecución permanece. Todavía tengo que encontrar una técnica para cerrar el espacio de ejecución principal cuando se cierra el formulario. Si muestra varios formularios, se quedará con espacios de ejecución.
El primer espacio de ejecución es casi siempre su sesión principal de PowerShell. Estas sesiones se eliminarán cuando cierre PowerShell. O puede utilizar el comando Remove-Runspace también en la última versión del módulo PSScriptTools.
Pruébalo tú mismo
Puedes probar todo esto por ti mismo. Instale el módulo PSScriptTools desde la Galería de PowerShell. Asegúrese de leer la ayuda para los nuevos comandos. Convertto-WPFGrid convierte todo el objeto entrante, así que asegúrese de usar Select-Object para especificar lo que desea ver en el formulario.