Búsqueda de sitios web

Agregar un calendario de perfil de PowerShell


Es posible que algunos de ustedes conozcan mi módulo PSCalendar, que pueden instalar desde la Galería de PowerShell. El módulo contiene comandos que puede utilizar para mostrar un calendario basado en consola. Los comandos del calendario le permiten especificar días para resaltar. Estos pueden ser días con eventos o citas especiales. Normalmente uso el comando Show-Calendar mientras escribe en el host y colorea la salida.

Este comando también tiene un parámetro que le permite especificar una posición en su consola. En otras palabras, puede indicarle a PowerShell dónde que muestre el calendario. Recientemente solucioné un error con el comando que no producía resultados óptimos. Ahora puedo usar mi función de aviso de PowerShell para mostrar un calendario. Lo primero que debes hacer es instalar al menos la versión 1.10.0 del módulo PSCalendar. Asegúrate de que funcione.

Ahora puedes agregar un calendario a tu consola mediante una función de aviso. Aquí está la función de aviso predeterminada de PowerShell con código adicional para mostrar el calendario.

#requires -modules @{ModuleName="PSCalendar";ModuleVersion="1.10.0"}  

Function prompt {

  #define a buffercell fill
  $fill = [system.management.automation.host.buffercell]::new(" ",$host.ui.RawUI.BackgroundColor,$host.ui.RawUI.BackgroundColor,"complete")
 
  #define a rectangle with an upper left corner X distance from the edge
  $left =$host.ui.RawUI.WindowSize.width - 42

  #need to adjust positioning based on buffer size of the console
  #is the cursor beyond the window size, ie have we scrolled down?
    if ($host.UI.RawUI.CursorPosition.Y -gt $host.UI.RawUI.WindowSize.Height) {
        $top = $host.ui.RawUI.CursorPosition.Y - $host.UI.RawUI.WindowSize.Height
    }
    else {
        $top = 0
    }
  #    System.Management.Automation.Host.Rectangle new(int left, int top, int right, int bottom)
  $r = [System.Management.Automation.Host.Rectangle]::new($left, 0, $host.ui.rawui.windowsize.width,$top+10)

  #clear the area for the calendar display
  $host.ui.rawui.SetBufferContents($r,$fill)

  #show the calendar in the upper right corner of the console
  $pos = [system.management.automation.host.coordinates]::new($left,0)
  Show-Calendar -Position $pos

  "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";

# .Link
# https://go.microsoft.com/fwlink/?LinkID=225750
# .ExternalHelp System.Management.Automation.dll-help.xml

}

Guardo esto como un archivo de secuencia de comandos de PowerShell separado y lo obtengo en la secuencia de comandos de mi perfil. Esta función no está diseñada para PowerShell ISE y es posible que no funcione bien en los terminales VS Code PowerShell. Ni siquiera puedo garantizar que funcione en sus consolas PowerShell. Tome este código como prueba de concepto y no listo para producción.

La función muestra el calendario del mes actual en la esquina superior derecha de su consola. La función de aviso borra esa área y reescribe el calendario. Esto funcionará mejor si su consola tiene al menos 120 caracteres de ancho. De lo contrario, tendrás que jugar con el código.

La función de aviso se ejecuta cada vez que presiona Enter.

Estoy ejecutando en la Terminal de Windows, pero esta función debería funcionar en una consola PowerShell tradicional donde es posible que tenga un búfer de desplazamiento grande.

El calendario resaltará las fechas en verde. Establecí algunos valores usando $PSDefaultParameterValues en mi perfil.

$PSDefaultParameterValues["*-*calendar:Highlightdate"]="1/18","1/8","1/16"

Puede averiguar dónde obtener las fechas que le interesan y completar la tabla hash. Espero que me cuentes qué piensas sobre todo esto. Y ahora que creo que tengo un manejo de los búferes y rectángulos de la consola, podría volver a visitar algunas funciones de avisos más antiguas. Con suerte, tendré más cosas divertidas con las que jugar. Mientras tanto, no te pierdas el próximo evento. ¡Disfrutar!

Artículos relacionados