
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.