PowerShell & Scripting
PowerShell Crescendo
Overview
PowerShell Crescendo (Modul Microsoft.PowerShell.Crescendo) erzeugt PowerShell-Cmdlets, die native Kommandozeilenprogramme aufrufen. Du beschreibst in einer JSON-Konfiguration, welche Parameter das Cmdlet hat, wie sie auf Argumente des Programms abgebildet werden und wie die Textausgabe in Objekte umgewandelt wird. Crescendo baut daraus ein Modul.
Wichtiger Status: Microsoft hat das Projekt eingestellt. Laut Microsoft Learn wird Crescendo seit Mai 2026 nicht mehr aktiv gepflegt und gilt aus Entwicklungssicht als archiviert. Issues und Pull Requests werden nicht mehr bearbeitet, neue Funktionen oder Fehlerkorrekturen sind nicht geplant. Letzte stabile Version ist 1.0.0 (März 2022), dazu kam 1.1.0-Preview01 (Dezember 2022).
Bestehende, mit Crescendo erzeugte Module laufen weiter, weil sie normalen PowerShell-Code enthalten. Für neue Projekte solltest Du eigene Wrapper-Funktionen schreiben.
How it works
Der Ablauf mit Crescendo:
- Du beschreibst ein oder mehrere Cmdlets in einer JSON-Datei. Ein Schema unter https://aka.ms/PowerShell/Crescendo/Schemas/2021-11 liefert in Visual Studio Code IntelliSense und Validierung.
- Pro Cmdlet legst Du Verb, Substantiv, den Pfad des Originalprogramms, Parameter mit Zuordnung zu Programmargumenten und optional einen Output-Handler fest.
- Der Output-Handler wandelt die Textausgabe des Programms in Objekte um, häufig mit regulären Ausdrücken oder ConvertFrom-Json.
- Die Crescendo-Cmdlets erzeugen daraus ein Skriptmodul mit Manifest, das ohne Crescendo selbst lauffähig ist.
Weil das Ergebnis gewöhnlicher PowerShell-Code ist, kannst Du ein generiertes Modul übernehmen und künftig von Hand weiterpflegen.
Benefits
- Objektausgabe für Altwerkzeuge: Textausgaben von CLI-Programmen werden zu filter- und sortierbaren Objekten
- Einheitliche Bedienung: Native Tools erhalten Verb-Substantiv-Namen, Hilfe und Tab-Vervollständigung
- Unabhängige Ergebnisse: Erzeugte Module laufen ohne Crescendo weiter und lassen sich manuell pflegen
Practical example
Ein Labordienstleister mit 110 Mitarbeitenden nutzt seit 2022 ein mit Crescendo erzeugtes Modul, das ein herstellereigenes CLI-Tool für Speichersysteme in Cmdlets verpackt. Nach der Einstellung von Crescendo übernimmt die IT das generierte Modul in ihr Git-Repository und pflegt es künftig direkt als PowerShell-Code. Neue Wrapper schreibt sie als Funktionen mit Parametervalidierung und regulären Ausdrücken für die Ausgabe. An der Bedienung für die Kollegen ändert sich nichts.
Things to keep in mind
- Für neue Projekte nicht mehr auf Crescendo setzen, weil es keine Fehlerkorrekturen und Sicherheitsupdates mehr gibt
- Erzeugte Module ins eigene Repository übernehmen und als normalen Code weiterpflegen
- Vor dem Bau eines Wrappers prüfen, ob das Programm eine JSON-Ausgabe bietet, ConvertFrom-Json ist robuster als Textparsing
- Wrapper, die Admin-Werkzeuge aufrufen, mit Parametervalidierung absichern, damit keine ungeprüften Argumente an das Programm gelangen
Licensing & availability
Crescendo ist kostenlos und Open Source. Microsoft pflegt das Projekt seit Mai 2026 nicht mehr, Support, Fehlerkorrekturen und Sicherheitsupdates sind nicht zu erwarten. Stand: Oktober 2026.
Conclusion
Crescendo war eine gute Idee, ist aber eingestellt. Bestehende Module kannst Du weiter nutzen und selbst pflegen, neue Wrapper schreibst Du besser als eigene Funktionen.
Further reading
Related articles
Microsoft 365
Microsoft Purview | Automated application of sensitivity labels
Microsoft 365
Microsoft 365 Security Audit with PowerShell, Part 1: Identity and Access
Microsoft 365
Microsoft 365 | PowerShell Security Audit – Part 3: Data Governance, Compliance, and Monitoring
Microsoft 365