informatica:sistemas_operativos:windows:powershell
Tabla de Contenidos
Powershell
Es el framework de Microsoft para gestión de la configuración y administración de sistemas de Microsoft. Está formado por un shell para línea de comandos, y un lenguaje de script basado en la plataforma .NET. Viene incluido en Windows desde el año 2006 y en 2016 Microsoft lo hizo Open Source y multiplataforma (Windows, Linux, Mac).
Snippets
Text expander
# Asistente de escritura # Este script hace estas 4 cosas constantemente: # 1. Mira lo que estás escribiendo en el teclado # 2. Guarda las últimas teclas en una “memoria corta” (buffer) # 3. Comprueba si lo que has escrito coincide con una palabra especial (,,pl, ,,firma, etc.) # 4. Si coincide: # borra esa palabra # pega una plantilla completa # OJO: durante un tiempo se sustituye lo que haya en el portapapeles # así que lo que se quiera copiar, hay que copiarlo después de que # se dispare una plantilla Add-Type -AssemblyName System.Windows.Forms # ============================================ # API WINDOWS # ============================================ Add-Type @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("user32.dll")] public static extern short GetAsyncKeyState(Int32 vKey); } "@ # ============================================ # SNIPPETS / PLANTILLAS # ============================================ $snippets = @{ ",,pl" = @" Fecha: Hora: ID incidencia: Comentarios: "@ ",,firma" = @" Fulanito Pérez ACME, Inc Extensión 1234 "@ } # ============================================ # BUFFER # ============================================ # Aquí se irán guardando las últimas pulsaciones de teclas # para revisar si coinciden con las plantillas definidas $buffer = "" $maxLength = 50 Write-Host "" Write-Host "=====================================" Write-Host " Snippets activos" Write-Host " Ctrl+C para salir" Write-Host "=====================================" Write-Host "" # ============================================ # MAPEO TECLAS # ============================================ # Convertir teclas en texto # Al pulsar las teclas se obtiene el código y no el caracter # en sí (65 para la A, 188 para la coma...) function Get-KeyChar($vk) { switch ($vk) { # Letras A-Z {$_ -ge 65 -and $_ -le 90} { return ([char]$vk).ToString().ToLower() } # Números 0-9 {$_ -ge 48 -and $_ -le 57} { return [char]$vk } # Espacio 32 { return " " } # Coma 188 { return "," } # Punto 190 { return "." } # Guion 189 { return "-" } default { return $null } } } # ============================================ # PEGADO RÁPIDO MEDIANTE PORTAPAPELES # ============================================ function Send-Text($text) { try { # Guardar portapapeles actual $oldClipboard = Get-Clipboard -Raw -ErrorAction SilentlyContinue # Copiar plantilla al portapapeles Set-Clipboard -Value $text Start-Sleep -Milliseconds 50 # Pegar (CTRL+V) [System.Windows.Forms.SendKeys]::SendWait("^v") Start-Sleep -Milliseconds 50 # Restaurar portapapeles anterior if ($null -ne $oldClipboard) { Set-Clipboard -Value $oldClipboard } } catch { Write-Host "Error usando clipboard" } } # ============================================ # LOOP PRINCIPAL # ============================================ while ($true) { Start-Sleep -Milliseconds 20 foreach ($vk in 1..255) { # Obtiene la tecla que se está pulsando $state = [Win32]::GetAsyncKeyState($vk) # Tecla recién pulsada if ($state -eq -32767) { $char = Get-KeyChar $vk if ($char) { $buffer += $char # Limitar tamaño del buffer if ($buffer.Length -gt $maxLength) { $buffer = $buffer.Substring($buffer.Length - $maxLength) } foreach ($trigger in $snippets.Keys) { # ¿Lo último que ha escrito el usuario coincide con uno de mis atajos? if ($buffer.EndsWith($trigger)) { Start-Sleep -Milliseconds 50 # Borrar trigger escrito for ($i = 0; $i -lt $trigger.Length; $i++) { [System.Windows.Forms.SendKeys]::SendWait("{BACKSPACE}") } Start-Sleep -Milliseconds 50 # Pegar plantilla Send-Text $snippets[$trigger] # Reset buffer $buffer = "" break } } } } } }
Recursos
informatica/sistemas_operativos/windows/powershell.txt · Última modificación: por tempwin
