Windows API mit PowerShell nutzen



PowerShell ist nicht nur für einfache Skripte oder Admin-Aufgaben geeignet. Mit der Add-Type-Direktive lässt sich direkt auf die Windows-API zugreifen – ohne externe Bibliotheken oder C#-Compiler. Damit öffnet sich die Tür zu Funktionen, die sonst nur aus C++ oder .NET verfügbar sind.

Ein gutes Beispiel: Eine einfache native MessageBox mit Buttons, direkt über user32.dll.


Grundlagen: Add-Type und DllImport

Mit Add-Type kannst du C#-Code direkt in PowerShell einbetten. In Kombination mit DllImport lassen sich Funktionen aus nativen Windows-Bibliotheken (DLLs) laden und verwenden.

Beispiel: MessageBox anzeigen

Add-Type @"
using System;
using System.Runtime.InteropServices;
 
public class WinAPI {
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, int type);
}
"@
 
# 1 = OK / Cancel
$result = [WinAPI]::MessageBox(0, "Möchtest du fortfahren?", "Frage", 1)
 
# Auswerten
switch ($result) {
    1 { Write-Host "Benutzer hat OK gedrückt." }
    2 { Write-Host "Benutzer hat Abbrechen gedrückt." }
    default { Write-Host "Unbekannte Auswahl (\$result)" }
}

Erklärung

  • user32.dll: Enthält GUI-Funktionen wie Fenster, Eingabe oder MessageBoxen.
  • DllImport: Bindet eine native DLL-Funktion ein.
  • MessageBox(...): Zeigt ein Dialogfenster an.
  • Rückgabewert 1 steht für “OK”, 2 für “Abbrechen” – je nach Buttonwahl.

Weitere Ideen

Sobald Add-Type verstanden ist, lassen sich viele Win32-API-Funktionen nutzen:

  • Fenstergröße/Position ändern
  • Clipboard auslesen
  • Benutzer sperren/abmelden
  • Registry-API direkt verwenden

Beispiel: GetAsyncKeyState für Tastaturüberwachung (vorsichtig einsetzen!) oder GetForegroundWindow, um aktive Fenster zu ermitteln.


Vorteile der API-Anbindung

  • Zugriff auf native Funktionen ohne zusätzliche Tools
  • Kein Kompilieren – läuft direkt in PowerShell
  • Flexibler als COM- oder WMI-Objekte in vielen Fällen
  • Ideal für Admin-Tools mit GUI-Feedback (z. B. MessageBoxen, Eingabefelder etc.)

Fazit

Die Windows-API ist mit PowerShell problemlos nutzbar – besonders dann, wenn Bordmittel nicht ausreichen oder man auf tiefere Systemfunktionen zugreifen muss. Die Kombination aus Add-Type, eingebettetem C#-Code und DllImport ist dabei erstaunlich mächtig und unkompliziert.

Für einfache Interaktionen wie eine MessageBox ist das Setup in Sekunden erledigt – und sofort produktiv nutzbar.