Warum C# nicht nur für Websites und Spiele ist?
\n\nWenn man „Automatisierung“ hört, denken die meisten an Python oder Bash. Und das zu Recht: Sie sind leicht, skriptbasiert, „für Arme“. Aber was, wenn Sie ein .NET-Entwickler sind, der keine neue Syntax für ein einziges Skript lernen möchte? Oder Ihr Projekt läuft bereits auf C# und Python-Abhängigkeiten nur zum Parsen von Logs mitzuschleppen, ist die Hölle?
\n\nWillkommen in der Welt der Aufgabenautomatisierung mit C#. Das ist nicht nur „eine Konsolenanwendung schreiben“. Es ist ein vollwertiges Werkzeug, das mit dem Dateisystem, der Registry, COM-Objekten, der GUI arbeiten und sogar PowerShell-Befehle ausführen kann. Und das alles – mit strenger Typisierung, IntelliSense und ohne Überraschungen.
\n\nIn diesem Artikel betrachten wir 5 konkrete Szenarien, die Sie noch heute anwenden können. Kein Blabla – nur Code und echte Anwendungsfälle.
\n\n1. Dateiverwaltung: Logs bereinigen, Projekte archivieren
\n\nDer häufigste Schmerzpunkt eines jeden Entwicklers sind überquellende Ordner mit Logs, Junk-Dateien und die Notwendigkeit, Builds zu sichern. C# Automatisierung von Dateioperationen ist in 5 Zeilen erledigt.
\n\nBeispiel: Löschen von Dateien, die älter als N Tage sind
\n\nusing System.IO;\n\nstring path = @"C:\\Logs\\";\nint daysOld = 30;\n\nvar oldFiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)\n .Where(f => File.GetLastWriteTime(f) < DateTime.Now.AddDays(-daysOld));\n\nforeach (var file in oldFiles)\n{\n File.Delete(file);\n Console.WriteLine($"Gelöscht: {file}");\n}\n\n\nÄndern Sie SearchOption.AllDirectories auf TopDirectoryOnly – und das Skript arbeitet nur im Stammverzeichnis. Fügen Sie try-catch hinzu – und es ist bereit für die Produktion.
Beispiel: Ordner mit Datum archivieren
\n\nusing System.IO.Compression;\n\nstring source = @"C:\\Projects\\MyApp\\bin\\Release";\nstring zipPath = $@"C:\\Backups\\MyApp_{DateTime.Now:yyyy-MM-dd}.zip";\n\nZipFile.CreateFromDirectory(source, zipPath);\nConsole.WriteLine($"Archiv erstellt: {zipPath}");\n\n\nDiesen Code können Sie an die Windows-Aufgabenplanung (Task Scheduler) hängen – und manuelle Backups vergessen. Automatisierung mit C# in Aktion.
\n\n2. Arbeiten mit der Registry: Systemeinstellungen ändern
\n\nManchmal muss man einen Registrierungsschlüssel für alle Benutzer setzen oder im Gegenteil einen Viren-Eintrag löschen. C# macht dies über Microsoft.Win32 sicher und ohne BAT-Dateien.
using Microsoft.Win32;\n\n// Wert setzen\nRegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\MyCompany", true);\nif (key == null)\n{\n key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyCompany");\n}\nkey.SetValue("InstallPath", @"C:\\Program Files\\MyApp");\nkey.Close();\n\n\nFür HKEY_CURRENT_USER verwenden Sie Registry.CurrentUser. Wichtig: Für HKML werden Administratorrechte benötigt – starten Sie die Anwendung als Administrator.
3. PowerShell aus C#: Zwei Welten vereinen
\n\nManchmal ist es einfacher, einen PowerShell-Befehl zu schreiben, als ihn in C# zu implementieren. Zum Beispiel, um eine Liste installierter Programme zu erhalten oder einen Dienst neu zu starten. Die Bibliothek System.Management.Automation ermöglicht Scripting mit C# unter Verwendung von PS-Befehlen.
Installieren Sie das NuGet-Paket:
\nInstall-Package Microsoft.PowerShell.SDK\n\nBeispiel: Dienst neu starten
\n\nusing System.Management.Automation;\n\nusing (PowerShell ps = PowerShell.Create())\n{\n ps.AddScript("Restart-Service -Name 'Spooler' -Force");\n var results = ps.Invoke();\n \n if (ps.HadErrors)\n {\n foreach (var error in ps.Streams.Error)\n {\n Console.WriteLine($"Fehler: {error.Exception.Message}");\n }\n }\n else\n {\n Console.WriteLine("Dienst neu gestartet.");\n }\n}\n\n\nAuf diese Weise erhalten Sie die Flexibilität von PowerShell und die Sicherheit von C#. Ideal für die Windows-Automatisierung im Un