Herramientas de usuario

Herramientas del sitio


informatica:sistemas_operativos:windows:powershell

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
informatica:sistemas_operativos:windows:powershell [2024/02/24 11:58] – creado tempwininformatica: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("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
 +                    }
 +                }
 +            }
 +        }
 +    }
 +}
 +</code>
 ===== Recursos ===== ===== Recursos =====
  
   * [[https://www.jasoft.org/Blog/post/Introduccion-a-la-administracion-de-sistemas-con-Windows-PowerShell|Introducción a la administración de sistemas con Powershell]]   * [[https://www.jasoft.org/Blog/post/Introduccion-a-la-administracion-de-sistemas-con-Windows-PowerShell|Introducción a la administración de sistemas con Powershell]]
informatica/sistemas_operativos/windows/powershell.1708772297.txt.gz · Última modificación: por tempwin