لماذا لغة C# ليست فقط للمواقع والألعاب؟
\n\nعندما تسمع كلمة "أتمتة"، يتذكر معظم الناس Python أو Bash. وهذا صحيح: فهي خفيفة، سكربتية، "للفقراء". ولكن ماذا لو كنت مطور .NET لا يريد تعلم بناء جملة جديد من أجل سكربت واحد؟ أو أن مشروعك بالفعل بلغة C#، وجلب تبعيات Python من أجل تحليل السجلات هو أمر مزعج؟
\n\nمرحبًا بك في عالم أتمتة المهام في لغة C#. إنها ليست مجرد "كتابة تطبيق وحدة تحكم". إنها أداة كاملة يمكنها العمل مع نظام الملفات، السجل، كائنات COM، واجهة المستخدم الرسومية، وحتى تنفيذ أوامر PowerShell. وكل هذا - بكتابة صارمة، مع IntelliSense وبدون مفاجآت.
\n\nفي هذه المقالة، سنستعرض 5 سيناريوهات محددة يمكنك تطبيقها اليوم. لا ماء - فقط كود وحالات حقيقية.
\n\n1. العمل مع الملفات: تنظيف السجلات، أرشفة المشاريع
\n\nالألم الأكثر شيوعًا لأي مطور هو المجلدات المتضخمة بالسجلات، الملفات غير المرغوب فيها، والحاجة إلى نسخ احتياطي للـ builds. أتمتة C# لعمليات الملفات تتم في 5 أسطر.
\n\nمثال: حذف الملفات الأقدم من N يومًا
\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($"تم الحذف: {file}");\n}\n\n\nغيّر SearchOption.AllDirectories إلى TopDirectoryOnly - وسيعمل السكربت فقط في الجذر. أضف try-catch - وسيكون جاهزًا للإنتاج.
مثال: أرشفة مجلد مع التاريخ
\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($"تم إنشاء الأرشيف: {zipPath}");\n\n\nيمكن ربط هذا الكود بمجدول Windows (Task Scheduler) - ونسيان النسخ الاحتياطي اليدوي. أتمتة في C# قيد التنفيذ.
\n\n2. العمل مع السجل: تغيير إعدادات النظام
\n\nأحيانًا تحتاج إلى كتابة مفتاح سجل لجميع المستخدمين، أو على العكس، حذف إدخال فيروسي. C# عبر Microsoft.Win32 تفعل ذلك بأمان وبدون ملفات BAT.
using Microsoft.Win32;\n\n// تعيين قيمة\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لـ HKEY_CURRENT_USER استخدم Registry.CurrentUser. مهم: لـ HKLM تحتاج صلاحيات المسؤول - قم بتشغيل التطبيق كمسؤول.
3. PowerShell من C#: دمج عالمين
\n\nأحيانًا يكون من الأسهل كتابة أمر PowerShell بدلاً من تنفيذه في C#. على سبيل المثال، الحصول على قائمة البرامج المثبتة أو إعادة تشغيل خدمة. مكتبة System.Management.Automation تسمح بتنفيذ كتابة السكربتات في C# مع استدعاء أوامر PS.
قم بتثبيت حزمة NuGet:
\nInstall-Package Microsoft.PowerShell.SDK\n\nمثال: إعادة تشغيل خدمة
\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($"خطأ: {error.Exception.Message}");\n }\n }\n else\n {\n Console.WriteLine("تمت إعادة تشغيل الخدمة.");\n }\n}\n\n\nبهذه الطريقة تحصل على مرونة PowerShell وأمان C#. مثالي لـ أتمتة Windows في الجذر