Automatización de tareas en C#: 5 herramientas potentes para el desarrollador perezoso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué C# no es solo para sitios web y juegos?

\n\n

Cuando escuchas «automatización», la mayoría recuerda Python o Bash. Y es justo: son ligeros, de scripting, «para pobres». Pero, ¿qué pasa si eres un desarrollador .NET que no quiere aprender una nueva sintaxis para un solo script? ¿O tu proyecto ya está en C# y arrastrar dependencias de Python para analizar registros es un infierno?

\n\n

Bienvenido al mundo de la automatización de tareas en C#. No es solo «escribir una aplicación de consola». Es una herramienta completa que puede trabajar con el sistema de archivos, el registro, objetos COM, GUI e incluso ejecutar comandos de PowerShell. Y todo esto, con tipado estricto, IntelliSense y sin sorpresas.

\n\n

En este artículo analizaremos 5 escenarios concretos que podrás aplicar hoy mismo. Sin rodeos: solo código y casos reales.

\n\n

1. Trabajo con archivos: limpiar registros, archivar proyectos

\n\n

El dolor más común de cualquier desarrollador son las carpetas de registros desbordadas, archivos basura y la necesidad de respaldar compilaciones. La automatización en C# de operaciones con archivos se hace en 5 líneas.

\n\n

Ejemplo: eliminar archivos más antiguos de N días

\n\n
using 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($"Eliminado: {file}");\n}\n
\n\n

Cambiamos SearchOption.AllDirectories por TopDirectoryOnly — y el script solo funciona en la raíz. Agregamos try-catch — y está listo para producción.

\n\n

Ejemplo: archivar carpeta con fecha

\n\n
using 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($"Archivo creado: {zipPath}");\n
\n\n

Este código se puede colocar en el Programador de tareas de Windows (Task Scheduler) — y olvidarse de las copias de seguridad manuales. Automatización en C# en acción.

\n\n

2. Trabajo con el registro: cambiar configuraciones del sistema

\n\n

A veces es necesario escribir una clave de registro para todos los usuarios o, por el contrario, eliminar una entrada de virus. C# a través de Microsoft.Win32 lo hace de forma segura y sin archivos BAT.

\n\n
using Microsoft.Win32;\n\n// Establecer valor\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\n

Para HKEY_CURRENT_USER usamos Registry.CurrentUser. Importante: para HKLM se necesitan permisos de administrador — ejecute la aplicación como administrador.

\n\n

3. PowerShell desde C#: cruzando dos mundos

\n\n

A veces es más fácil escribir un comando de PowerShell que implementarlo en C#. Por ejemplo, obtener la lista de programas instalados o reiniciar un servicio. La biblioteca System.Management.Automation permite realizar scripting en C# invocando comandos de PS.

\n\n

Instale el paquete NuGet:

\n
Install-Package Microsoft.PowerShell.SDK
\n\n

Ejemplo: reiniciar un servicio

\n\n
using 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($"Error: {error.Exception.Message}");\n        }\n    }\n    else\n    {\n        Console.WriteLine("Servicio reiniciado.");\n    }\n}\n
\n\n

De esta manera obtienes la flexibilidad de PowerShell y la seguridad de C#. Ideal para la automatización de Windows en cor

Blogs

Book Recommendations