informatica:sistemas_operativos:windows:powershell
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| informatica:sistemas_operativos:windows:powershell [2024/02/24 11:58] – creado tempwin | informatica:sistemas_operativos:windows:powershell [2026/05/22 15:52] (actual) – tempwin | ||
|---|---|---|---|
| Línea 3: | Línea 3: | ||
| 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). | 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 ==== | ||
| + | |||
| + | <code powershell> | ||
| + | # 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(" | ||
| + | public static extern short GetAsyncKeyState(Int32 vKey); | ||
| + | } | ||
| + | "@ | ||
| + | |||
| + | # ============================================ | ||
| + | # SNIPPETS / PLANTILLAS | ||
| + | # ============================================ | ||
| + | |||
| + | $snippets = @{ | ||
| + | |||
| + | ",, | ||
| + | Fecha: | ||
| + | Hora: | ||
| + | ID incidencia: | ||
| + | Comentarios: | ||
| + | "@ | ||
| + | |||
| + | ",, | ||
| + | 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]:: | ||
| + | |||
| + | 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]:: | ||
| + | |||
| + | # 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; | ||
| + | [System.Windows.Forms.SendKeys]:: | ||
| + | } | ||
| + | |||
| + | Start-Sleep -Milliseconds 50 | ||
| + | |||
| + | # Pegar plantilla | ||
| + | Send-Text $snippets[$trigger] | ||
| + | |||
| + | # Reset buffer | ||
| + | $buffer = "" | ||
| + | |||
| + | break | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| ===== Recursos ===== | ===== Recursos ===== | ||
| * [[https:// | * [[https:// | ||
informatica/sistemas_operativos/windows/powershell.1708772297.txt.gz · Última modificación: por tempwin
