En entornos empresariales, automatizar tareas repetitivas o de soporte técnico puede incrementar significativamente la productividad. Este artículo demuestra cómo una aplicación desarrollada en WinUI 3 puede invocar scripts de PowerShell para automatizar procesos del sistema operativo Windows, utilizando técnicas de UI Automation y ejecución controlada desde C#.

Requisitos previos Link to heading

  • Visual Studio 2022 o superior
  • Windows App SDK v1.4 o superior
  • PowerShell 5.1 o superior (se utiliza el host clásico de Windows)
  • Conocimientos básicos de scripting en PowerShell

Crear la app base en WinUI 3 Link to heading

dotnet new winui3 -n WinUIAutomationDemo
cd WinUIAutomationDemo

En el proyecto se incluirá un botón que al hacer clic ejecutará un script de PowerShell que abre una aplicación, interactúa con su UI, y cierra el proceso.

Crear un script PowerShell para automatización de UI Link to heading

El siguiente ejemplo abre el Bloc de notas, espera 2 segundos, escribe texto y lo cierra:

Start-Process notepad
Start-Sleep -Seconds 2

Add-Type -AssemblyName UIAutomationClient, UIAutomationTypes

$notepad = Get-Process notepad | Select-Object -First 1
$element = [System.Windows.Automation.AutomationElement]::FromHandle($notepad.MainWindowHandle)
$pattern = $element.GetCurrentPattern([System.Windows.Automation.TextPatternIdentifiers]::Pattern)

if ($pattern -ne $null) {
    # Este patrón no está disponible en Notepad; se puede mejorar el ejemplo para apps con campos de texto.
}

# Alternativa: usar SendKeys para insertar texto (más genérico)
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait("Automatización desde WinUI{ENTER}")
Start-Sleep -Seconds 1

Stop-Process -Name notepad

Este script puede guardarse como AutomateNotepad.ps1.

Invocar el script desde la app WinUI 3 (C#) Link to heading

Se utiliza System.Diagnostics.Process para lanzar PowerShell:

using System.Diagnostics;

private void RunAutomationScript()
{
    var psi = new ProcessStartInfo
    {
        FileName = "powershell.exe",
        Arguments = "-ExecutionPolicy Bypass -File \"Scripts\\AutomateNotepad.ps1\"",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    };

    var process = new Process { StartInfo = psi };
    process.Start();
}

El método puede invocarse desde el Click de un botón:

<Button Content="Automatizar Notepad" Click="OnRunAutomationClick"/>
private void OnRunAutomationClick(object sender, RoutedEventArgs e)
{
    RunAutomationScript();
}

Consideraciones de seguridad Link to heading

  • El script debe estar ubicado en una ruta segura.
  • Se recomienda firmar los scripts en entornos productivos.
  • Evitar invocar comandos con privilegios elevados desde la UI.

Conclusión Link to heading

El uso combinado de WinUI 3 y PowerShell permite extender el alcance de las aplicaciones de escritorio modernas, integrando capacidades de automatización del sistema operativo sin necesidad de desarrollar drivers o servicios complejos. Esta estrategia es ideal para apps internas, herramientas de soporte técnico o asistentes de productividad personalizados.