Scripts auxiliares de PowerShell para la terminal de Windows
He dedicado algún tiempo durante los últimos días a configurar mi Terminal de Windows en orden. Espero que hayas visto mi publicación reciente sobre cómo hacer una copia de seguridad de mi archivo settings.json. También he reunido algunos otros scripts simples de PowerShell que uso para hacer que Windows Terminal sea aún más fácil de usar y administrar.
Versión de seguimiento
Uno de los desafíos es que Windows Terminal puede actualizarse automáticamente de forma silenciosa. Por cierto, lo agradezco. Pero esto también significa que me estoy perdiendo información sobre los cambios que podría necesitar conocer. La configuración de mi perfil era un desastre porque no estaba al tanto de los cambios. Entonces lo arreglé.
Debido a que ejecuto mi sesión diaria de PowerShell 7 en la Terminal de Windows, me pareció un buen lugar para comenzar. Aunque el script también funcionará en Windows PowerShell 5.1. La idea es almacenar el número de versión actual en algún lugar. Decidí crear un archivo json almacenado en $Home. El script comparará la versión actualmente instalada con la versión anterior almacenada. Si la versión actual es más nueva, recibo un mensaje Y mi navegador se abre en la página Lanzamientos en GitHub para poder ver las novedades. Aquí está el guión.
#Track-WTVersion.ps1
#get the currently installed application
$pkg = Get-AppxPackage -Name Microsoft.WindowsTerminal
#get the version numbert
[version]$current = $pkg.Version
#check for previous version file
$verFile = Join-Path -path $home -ChildPath wtver.json
if (Test-Path $verfile) {
#compare versions
$in = (Get-Content -Path $verFile | ConvertFrom-Json)
$previous = $in.VersionString -as [version]
# Write-Host "Comparing stored version $previous with current version $current" -ForegroundColor cyan
If ($current -gt $previous) {
Write-Host "A newer version of Windows Terminal has been detected." -ForegroundColor Yellow
#view release notes in your default browser
Start-Process https://github.com/microsoft/terminal/releases
}
else {
# Write-Host "Windows Terminal is up to date." -ForegroundColor Green
}
}
#create the json file, adding the version as a string which makes it easier to reconstruct
$current | Select-Object *,
@{Name = "VersionString"; Expression = {$_.tostring()}},
@{Name="Date";Expression={(Get-Date).DateTime}} |
ConvertTo-Json | Out-File -FilePath $verfile -Encoding ascii -Force
En mi secuencia de comandos de perfil de PowerShell, si detecto que estoy ejecutando en la Terminal de Windows, ejecuto esta secuencia de comandos.
#If in Windows Terminal
if ( $env:wt_session) {
#dot source my custom prompt function
. C:\scripts\ps7terminal-prompt.ps1
#check if there is a new version of Windows Terminal
C:\scripts\Track-WTVersion.ps1
}
Cada vez que inicio una nueva sesión de PowerShell si se cambia la versión de Windows Terminal, recibo una notificación.
Abrir valores predeterminados
Windows Terminal utiliza un archivo defaults.json que puede anular con su propio settings.json. O dicho de otra manera, los archivos esencialmente se fusionan con settings.json “ganando” cualquier conflicto. Mi desafío era querer saber qué hay en el archivo predeterminado, especialmente en lo que respecta a las combinaciones de teclas. Escribí este breve script para iniciar el archivo.
#Open-WTDefaults.ps1
# a simple script to open the defaults.json file for Windows Terminal using
# the assoociate application for json files
$json = Join-Path -path (Get-AppxPackage Microsoft.WindowsTerminal).InstallLocation -ChildPath defaults.json
if (Test-Path $json) {
Invoke-Item $json
}
else {
Write-Warning "Could not find default.json file."
}
Como estoy usando Invoke-Item, el archivo se abrirá con la aplicación asociada. Para la mayoría de ustedes, probablemente será VS Code. No desea editar este archivo. Pero esto hace que sea fácil abrirlo y verlo.
Obtener procesos de terminal de Windows
El último script surgió de un problema que leí en el repositorio GitHub de Windows Terminal. Se hizo un comentario sobre el uso de la memoria. Sentí curiosidad y se me ocurrió este breve script que obtiene el proceso de Windows Terminal y todos sus procesos secundarios.
#requires -version 7.0
#Get-WSProcess.ps1
#get the Windows Terminal process and its children
[cmdletbinding()]
Param()
Get-Process -name WindowsTerminal -OutVariable main
Write-Verbose "Getting processes related to $($main.id)"
(Get-Process).Where({$_.parent.id -eq $main.id})
Estoy seguro de que hay más de una forma de hacer esto, pero a mí me funciona bien.
Actualización: estaba haciendo algunas pruebas más y esta versión del script solo funciona en PowerShell 7.
Espero que los encuentres tan útiles como yo. Como siempre, preguntas y comentarios son bienvenidos.
