🎯 الدليل الشامل لأتمتة مهام تكنولوجيا المعلومات باستخدام 50 سكربت PowerShell

🎯 50 PowerShell Scripts for Windows Administration

تعد إدارة البنية التحتية يدوياً في عصرنا الحالي بمثابة محاولة قيادة طائرة عملاقة يدوياً دون استخدام الطيار الآلي؛ فهي مهمة مستنزفة للوقت ومعرضة للأخطاء البشرية. هنا تبرز لغة PowerShell كالمحرك التوربيني الذي ينقل عملك من البطء اليدوي إلى السرعة البرمجية الفائقة. هذا الدليل ليس مجرد قائمة، بل هو صندوق أدوات يحتوي على 50 حلاً برمجياً تم استخلاصها بدقة لأتمتة المهام اليومية في بيئة ويندوز. سنأخذك في رحلة تبدأ من مراقبة النبض الحي للنظام، مروراً بإدارة المستخدمين والشبكات، وصولاً إلى أتمتة النسخ الاحتياطي. كل سكربت هنا هو بمثابة موظف مخلص يعمل لديك على مدار الساعة دون كلل، مما يمنحك التفرغ للتفكير في الحلول الإبداعية بدلاً من الغرق في المهام المتكررة.

1️⃣ Get System Information — استخراج معلومات الجهاز

📖 هذا السكربت يستخرج كافة تفاصيل العتاد ونظام التشغيل بدقة متناهية.
يعمل الأمر Get-ComputerInfo مثل بطاقة الهوية الرقمية للجهاز، حيث يقدم معلومات شاملة عن المعالج والذاكرة وإصدار الويندوز لتسهيل عمليات الجرد والتوثيق الفني.
Get-ComputerInfo
مدير نظام يريد توثيق 50 جهاز كمبيوتر في مؤسسته. بدلاً من فتح خصائص النظام على كل جهاز والنسخ يدوياً، يرسل هذا الأمر عبر PowerShell عن بعد لجميع الأجهزة في دقيقة واحدة ويحصل على ملف CSV متكامل.

2️⃣ Check Disk Space — فحص سعة التخزين

📖 يقوم هذا الكود بحساب المساحات الشاغرة في الأقراص الصلبة وتحويلها لوحدات قابلة للقراءة.
يستخدم الأمر Get-PSDrive لاستعراض جميع محركات الأقراص مع تحويل القيم إلى جيجابايت لتسهيل القراءة، مما يساعد في اكتشاف امتلاء الأقراص قبل توقف الخدمات.
Get-PSDrive -PSProvider FileSystem | Select-Object Name, @{ n='FreeGB';e={[math]::Round($_.Free/1GB,2)}}, @{ n='UsedGB';e={[math]::Round(($_.Used/1GB),2)}}, @{ n='TotalGB';e={[math]::Round($_.Size/1GB,2)}}
خادم ملفات يعاني من بطء مفاجئ. مدير النظام يشغّل السكربت ويكتشف أن القرص C ممتلئ بنسبة 97%. يحرر مساحة 50 جيجابايت ويعيد الخادم لسرعته الطبيعية دون أي انقطاع في الخدمة.

3️⃣ List Running Services — الخدمات النشطة حالياً

📖 يسرد جميع الخدمات النشطة فقط لاستبعاد الفوضى والتركيز على ما يستهلك الموارد.
يستخدم Get-Service مع فلتر الحالة النشطة لتصفية الخدمات العاملة فقط، مما يسهل اكتشاف الخدمات غير الضرورية التي قد تبطئ النظام.
Get-Service | Where-Object {$_.Status -eq 'Running'} | Select-Object Name, DisplayName, Status
مسؤول تقنية يريد تحسين أداء خادم قديم. يشغّل السكربت، يكتشف 12 خدمة غير ضرورية تعمل في الخلفية (مثل خدمة Xbox وخدمة الطباعة غير المستخدمة). يوقفها، ويرتفع أداء الخادم بنسبة 30%.

4️⃣ Restart a Service — إعادة تشغيل خدمة متعثرة

📖 يقوم بإعادة تنشيط الخدمات المتعثرة لإعادتها للعمل فوراً عند حدوث أي خلل.
يستخدم الأمر Restart-Service مع قوة إجبارية وخيار إيقاف الأخطاء، وهو مفيد جداً لإصلاح أعطال الطابعات (Spooler) أو خوادم الويب (W3Svc).
param($ServiceName = "Spooler") Restart-Service -Name $ServiceName -Force -ErrorAction Stop Write-Output "Service '$ServiceName' restarted."
في شركة محاماة، توقفت جميع طابعات المكاتب فجأة. مسؤول النظام يشغّل السكربت مع اسم خدمة Spooler، وفي أقل من 3 ثوانٍ تعود الطباعة للعمل طبيعياً دون الحاجة لإعادة تشغيل الخادم.

5️⃣ List Installed Software — جرد البرامج المثبتة

📖 يستخرج كافة البرامج المنصبة وإصداراتها لمراقبة الامتثال البرمجي.
يستخدم Get-WmiObject مع فئة Win32_Product لاستعراض جميع التطبيقات مع أسماء البائعين والإصدارات، مما يسهل اكتشاف البرامج غير المرخصة.
Get-WmiObject -Class Win32_Product | Select-Object Name, Version, Vendor | Sort-Object Name
مدير تقنية في مؤسسة تعليمية يريد التأكد من عدم وجود برامج قرصنة. يشغّل السكربت على 200 جهاز، ويصدر النتائج لملف CSV. يكتشف 3 برامج غير مرخصة، ويتخذ الإجراء اللازم فوراً.

6️⃣ Check Windows Updates — سجل التحديثات الأمنية

📖 يسترجع سجل تحديثات الويندوز لمعرفة تاريخ الرقع الأمنية والتحقق من استقرار النظام.
يستخدم الأمر Get-WindowsUpdateLog لجلب جميع التحديثات المثبتة مع تواريخها، وهو أداة أساسية للتدقيق الأمني والتأكد من تطبيق التصحيحات الحرجة.
Get-WindowsUpdateLog
بعد هجوم إلكتروني عالمي، يسأل المدير الأمني: "هل طبقنا التحديث الأمني MS-1234؟". مدير النظام يشغّل السكربت ويتأكد من تثبيت التحديث على جميع الخوادم خلال 10 دقائق بدلاً من فحص كل خادم يدوياً.

7️⃣ Get Top CPU Processes — أكثر العمليات استهلاكاً للمعالج

📖 يرتب أعلى 10 عمليات استنزافاً للمعالج لتحديد سبب بطء الجهاز المفاجئ.
يستخدم Get-Process مع ترتيب تنازلي حسب استهلاك المعالج، ليكشف فوراً عن التطبيقات "الشرهة" التي تستهلك موارد النظام دون مبرر.
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU, WS
مستخدم يشكو من بطء جهازه أثناء العمل على برنامج المحاسبة. مسؤول الدعم يشغّل السكربت، يكتشف أن المتصفح Chrome يستهلك 80% من المعالج. يقوم بإغلاقه، ويعود الجهاز للعمل الطبيعي.

8️⃣ Kill a Process by Name — إنهاء عملية عالقة

📖 ينهي البرامج العالقة بشكل إجباري وفوري لاستعادة استقرار النظام.
يستخدم Stop-Process مع خيار الإجبار Force لإنهاء أي تطبيق متجمد أو غير مستجيب، مما يوفر عناء فتح مدير المهام والبحث يدوياً عن العملية.
Stop-Process -Name "notepad" -Force -ErrorAction SilentlyContinue
برنامج Excel تجمد أثناء حفظ ملف مهم استغرق 4 ساعات من العمل. المستخدم يشغّل سكربت PowerShell من شريط الأوامر ينهي العملية فوراً، ثم يعيد فتح Excel ويسترجع الملف من النسخة الاحتياطية التلقائية.

9️⃣ Monitor CPU Usage — مراقبة المعالج حياً

📖 يقرأ استهلاك المعالج كل ثانيتين لكشف الاختناقات اللحظية.
يستخدم حلقة تكرار مع Get-Counter لقراءة نسبة استهلاك المعالج آنياً، ويعرض الوقت مع القيمة في سجل متجدد، مما يساعد في تشخيص مشاكل الأداء المتقطعة.
while ($true) { $cpu = Get-Counter '\Processor(_Total)\% Processor Time' $value = [math]::Round($cpu.CounterSamples[0].CookedValue,2) Write-Host "$(Get-Date -Format HH:mm:ss) CPU: $value%" Start-Sleep -Seconds 2 }
مهندس نظم يحاول تشخيص سبب انقطاع خادم الويب في أوقات محددة. يشغّل مراقب المعالج لمدة ساعة، ويكتشف أن الارتفاع المفاجئ يحدث عند تنفيذ مهمة النسخ الاحتياطي — ينقل المهمة لوقت متأخر ويحل المشكلة.

🔟 Monitor Memory Usage — مراقبة الذاكرة حياً

📖 يراقب استهلاك الذاكرة الحية لحظياً وينبه قبل وصول النظام لمرحلة التجمد.
يقرأ Win32_OperatingSystem لحساب الذاكرة الحرة والمستخدمة والنسبة المئوية، مما يسمح بالتدخل المبكر قبل استنزاف كامل الذاكرة.
while ($true) { $os = Get-CimInstance Win32_OperatingSystem $freeMB = [math]::Round($os.FreePhysicalMemory/1024,2) $totalMB = [math]::Round($os.TotalVisibleMemorySize/1024,2) $usedPct = [math]::Round((($totalMB - $freeMB)/$totalMB)*100,2) Write-Host "$(Get-Date -Format HH:mm:ss) FreeMB: $freeMB | Used%: $usedPct" Start-Sleep -Seconds 2 }
خادم قاعدة بيانات يظهر بطئاً تدريجياً بعد الظهر يومياً. المراقبة الحية تكشف أن استهلاك الذاكرة يرتفع من 40% إلى 95% خلال ساعة. يضيف المهندس 8GB إضافية للخادم ويحل المشكلة نهائياً.

1️⃣1️⃣ Export Performance Logs — تصدير سجلات الأداء

📖 يلتقط عينات أداء المعالج لفترة محددة ويصدرها لملف CSV لدراسة أنماط الضغط على النظام.
يستخدم Get-Counter مع فاصل زمني ثانية واحدة وعدد محدد من العينات لبناء سجل أداء تفصيلي يمكن تحليله في Excel أو أي أداة أخرى.
$counter = '\Processor(_Total)\% Processor Time' Get-Counter -Counter $counter -SampleInterval 1 -MaxSamples 30 | Select-Object -ExpandProperty CounterSamples | Select-Object Timestamp, CookedValue | Export-Csv -Path "C:\Reports\CPU_Perf.csv" -NoTypeInformation
فريق الدعم الفني يتلقى شكوى متكررة من بطء الخادم. يصدر المهندس سجل أداء لمدة 30 ثانية في أوقات الذروة، ويحلله في Excel، ليكشف أن التطبيق القديم يسبب ارتفاعاً دورياً كل 10 ثوانٍ. يخطط لترقية التطبيق بناءً على هذه البيانات.

1️⃣2️⃣ Get System Uptime — وقت تشغيل النظام

📖 يستعرض تاريخ آخر إقلاع للنظام لتحديد مدى استقرار الخادم.
يستخدم الأمر Get-CimInstance مع فئة Win32_OperatingSystem لقراءة وقت آخر تشغيل، وهو مؤشر حاسم على استقرار الخادم وحاجته لإعادة التشغيل الوقائي.
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
مدير نظام يريد التحقق من سياسة إعادة التشغيل الشهرية. يشغّل السكربت على 15 خادماً، يكتشف أن 3 خوادم لم تُعد تشغيلها منذ 6 أشهر. يجدول إعادة تشغيلها خارج أوقات العمل لتحسين أدائها.

1️⃣3️⃣ Shutdown / Restart Computer — إيقاف أو إعادة تشغيل الجهاز

📖 يرسل أمراً إجبارياً لإعادة تشغيل أو إغلاق الجهاز المحلي فوراً لتطبيق التغييرات.
يستخدم Restart-Computer مع خيار Force لإعادة التشغيل الفوري، وهو مفيد لتطبيق التحديثات الأمنية أو تغييرات السجل التي تتطلب إعادة تشغيل.
Restart-Computer -Force
قسم تقنية المعلومات يطبق تحديثاً أمنياً عاجلاً على 30 جهاز كمبيوتر. بدلاً من طلب إعادة تشغيل يدوية من كل موظف، يشغّل المهندس السكربت عبر PowerShell عن بعد على جميع الأجهزة في دقيقة واحدة.
🔑 نصيحة أساسية: استخدم -WhatIf في أي أمر قبل تنفيذه على خوادم الإنتاج — فالتأكيد الافتراضي قد ينقذك من إعادة تشغيل غير مخطط لها. دائماً اختبر السكربت على بيئة اختبارية أولاً.
خلاصة معلومات النظام والمراقبة:
  • استخراج معلومات شاملة عن الجهاز ونظام التشغيل باستخدام Get-ComputerInfo.
  • مراقبة الأداء حياً للمعالج والذاكرة لاكتشاف الاختناقات قبل أن تؤثر على المستخدمين.
  • إدارة العمليات والخدمات — إيقاف التطبيقات العالقة وإعادة تشغيل الخدمات المتعثرة.
  • تصدير سجلات الأداء لتحليلها لاحقاً واتخاذ قرارات مدعومة بالبيانات.

📖 جدول المصطلحات

المصطلح (English)الترجمةالمفهوم
PowerShellقشرة الطاقةلغة برمجة نصية وأداة إدارة من مايكروسوفت لأتمتة مهام ويندوز.
Get-ComputerInfoالحصول على معلومات الجهازأمر يجلب كافة تفاصيل العتاد والبرمجيات لنظام التشغيل ويندوز.
Get-PSDriveالحصول على محركات الأقراصأمر يعرض معلومات عن جميع محركات الأقراص المتصلة بالنظام.
Get-Serviceالحصول على الخدماتأمر يسرد جميع خدمات ويندوز مع حالتها الحالية (نشطة/متوقفة).
Get-Processالحصول على العملياتأمر يعرض العمليات الجارية حالياً مع استهلاكها للموارد.
Get-Counterالحصول على العدادأمر يقرأ عدادات الأداء المختلفة مثل استهلاك المعالج والذاكرة.
Get-CimInstanceالحصول على مثيل CIMأمر يستخدم نموذج المعلومات العامة لقراءة بيانات النظام المتقدمة.

1️⃣ Add a Local User — إضافة مستخدم محلي

📖 ينشئ مستخدماً محلياً بكلمة مرور آمنة ومشفرة لتوفير وصول سريع للأعضاء الجدد.
يستخدم الأمر New-LocalUser مع كلمة مرور يتم إدخالها بشكل آمن (مشفر) لإنشاء حسابات محلية دون الحاجة للدخول إلى واجهة إدارة المستخدمين الرسومية.
$securePwd = Read-Host -AsSecureString "Enter password for new user" New-LocalUser -Name "TestUser" -Password $securePwd -FullName "Test User" -Description "Created by script"
مؤسسة تستقبل 20 متدرباً جديداً في بداية الشهر. بدلاً من إنشاء حسابات لكل واحد يدوياً عبر لوحة التحكم، يكتب مسؤول النظام ملف CSV بأسمائهم ويستخدم هذا السكربت ضمن حلقة تكرار لإنشاء 20 حساباً في 5 ثوانٍ.

2️⃣ Delete a Local User — حذف مستخدم محلي

📖 يمسح حساب مستخدم محدد لضمان عدم بقاء أي ثغرات أمنية بعد مغادرة الموظفين.
يستخدم Remove-LocalUser مع التحقق المسبق من وجود الحساب لتجنب الأخطاء، وهو إجراء أمني أساسي عند مغادرة أي موظف للمؤسسة.
if (Get-LocalUser -Name "TestUser" -ErrorAction SilentlyContinue) { Remove-LocalUser -Name "TestUser" }
موظف في قسم الموارد البشرية استقال فجأة. مسؤول النظام يشغّل السكربت لحذف حسابه المحلي من جهاز القسم، ثم ينتقل لحذف حسابه من Active Directory — كل ذلك في أقل من دقيقة.

3️⃣ Add a User to Group — إضافة مستخدم لمجموعة صلاحيات

📖 يرفع مستخدم لمجموعة المسؤولين لتمكينه من تنفيذ المهام الإدارية الحساسة.
يستخدم الأمر Add-LocalGroupMember لإضافة المستخدمين إلى مجموعات مثل Administrators، مما يمنحهم صلاحيات الوصول الكامل للنظام.
Add-LocalGroupMember -Group "Administrators" -Member "TestUser"
مطور برمجيات يحتاج صلاحيات مسؤول لتثبيت أدوات التطوير على جهازه. بدلاً من إعطائه كلمة سر المسؤول، يضيفه مسؤول النظام لمجموعة المسؤولين مؤقتاً، ثم يزيله بعد انتهاء التثبيت.

4️⃣ Export User Accounts to CSV — تصدير حسابات المستخدمين

📖 يصدر بيانات كافة المستخدمين ووقت دخولهم الأخير لملخّص مراجعة أمنية.
يستخدم الأمر Get-LocalUser مع تصدير الخصائص الأساسية لملف CSV، مما يسهل تدقيق الحسابات النشطة وغير النشطة في المؤسسة.
Get-LocalUser | Select-Object Name, Enabled, LastLogon | Export-Csv -Path "C:\Reports\LocalUsers.csv" -NoTypeInformation
مدير أمن المعلومات يطلب مراجعة فورية لجميع الحسابات المحلية على الخوادم. يشغّل المهندس السكربت ويصدر قائمة بـ 150 حساباً في ثوانٍ، يكتشف منها 12 حساباً قديماً لم يُستخدم منذ سنة — يوصي بحذفها فوراً.

5️⃣ Reset AD User Password — إعادة تعيين كلمة المرور في Active Directory

📖 يعيد تعيين كلمات المرور في الدليل النشط ويفك القفل لإعادة الموظفين للإنتاجية فوراً.
يستخدم الوحدة النمطية ActiveDirectory مع Set-ADAccountPassword لإعادة تعيين كلمة المرور وفك القفل عن الحسابات المقفلة بسبب محاولات الدخول الفاشلة.
Import-Module ActiveDirectory Set-ADAccountPassword -Identity "john.doe" -Reset -NewPassword (ConvertTo-SecureString "N3wP@ssw0rd!" -AsPlainText -Force) Unlock-ADAccount -Identity "john.doe"
موظف نسي كلمة مروره وجرب الدخول 5 مرات خاطئة — تم قفل حسابه وهو على وشك تقديم عرض مهم للعميل. مسؤول النظام يشغّل السكربت، يعيد تعيين كلمة المرور ويفك القفل في 10 ثوانٍ، والموظف يعود للعمل فوراً.

6️⃣ List AD Users — قائمة مستخدمي الدليل النشط

📖 يستخرج كافة حسابات الدومين مع أسمائهم الكاملة لتسهيل إدارة الهويات المركزية.
يستخدم Get-ADUser مع جميع المرشحات لاستعراض حسابات المؤسسة، وإمكانية تصديرها مباشرة لملف CSV لأرشفة بيانات المستخدمين.
Import-Module ActiveDirectory Get-ADUser -Filter * -Properties DisplayName, UserPrincipalName | Select-Object DisplayName, UserPrincipalName | Export-Csv -Path "C:\Reports\ADUsers.csv" -NoTypeInformation
شركة تريد التحقق من دقة بيانات المستخدمين في Active Directory قبل الترحيل إلى نظام هوية جديد. يصدر المهندس كافة الحسابات، ويقارنها بقاعدة بيانات الموارد البشرية، ويكتشف 25 حساباً لموظفين سابقين لم يتم حذفهم.

7️⃣ List Locked-Out Users — تحديد المستخدمين المقفلين

📖 يحدد المستخدمين المقفلين حالياً في الدليل النشط نتيجة محاولات الدخول الخاطئة.
يستخدم Search-ADAccount مع خاصية LockedOut لفحص جميع المستخدمين المقفلين، مما يساعد في اكتشاف محاولات الاختراق المحتملة.
Import-Module ActiveDirectory Search-ADAccount -LockedOut | Select-Object Name, SamAccountName, LockedOut | Export-Csv "C:\Reports\LockedOutUsers.csv" -NoTypeInformation
مسؤول الأمن يلاحظ ارتفاعاً غير طبيعي في عدد الحسابات المقفلة صباحاً. يشغّل السكربت، يكتشف أن 8 حسابات من نفس النطاق تم قفلها في 10 دقائق — مؤشر على هجوم تخمين كلمات مرور. يطبق إجراءات الحماية فوراً.

8️⃣ Unlock AD User — فك قفل حساب مستخدم

📖 يعيد تفعيل حساب المستخدم المعلق في الدليل النشط بلمحة بصر ودون تعقيد.
يستخدم الأمر Unlock-ADAccount مع اسم المستخدم كمعامل إلزامي، مما يسمح لفريق الدعم بفك القفل عن بعد دون الحاجة لصلاحيات كاملة.
param([Parameter(Mandatory=$true)][string]$UserSam) Import-Module ActiveDirectory Unlock-ADAccount -Identity $UserSam
مستخدم مندوب مبيعات في منطقة نائية يحاول الدخول لنظام الشركة — حسابه مقفل. يتصل بمركز الدعم، ويقوم الفني بتشغيل هذا السكربت مع اسم المستخدم، ويُفتح الحساب خلال 5 ثوانٍ دون تدخل مسؤول النظام الأساسي.

9️⃣ Get AD Group Membership — أعضاء مجموعة الدليل النشط

📖 يجلب كافة الأعضاء المنتمين لمجموعة محددة في الدومين لضمان دقة الصلاحيات الممنوحة.
يستخدم Get-ADGroupMember مع خاصية البحث المتكرر Recursive لاستعراض جميع الأعضاء داخلها وفروعها، مما يكشف عن أي صلاحيات غير مبررة.
Import-Module ActiveDirectory Get-ADGroupMember -Identity "Domain Users" -Recursive | Select-Object Name, SamAccountName, objectClass
مراجعة أمنية سنوية تكشف أن مجموعة "Domain Admins" تضم 15 عضواً، بينما يفترض أن تضم 5 فقط. يحدد المهندس الأعضاء غير المصرح لهم ويزيلهم فوراً، مشدداً على سياسة "الصلاحيات الأقل".

🔟 Export AD Groups to CSV — تصدير مجموعات الدليل النشط

📖 يصدر كافة المجموعات وأوصافها لتوثيق الهيكل التنظيمي للمؤسسة برمجياً.
يستخدم Get-ADGroup لاستعراض جميع المجموعات مع أوصافها، وإصدارها لملف CSV ليكون مرجعاً للمراجعات الأمنية والتدقيق.
Import-Module ActiveDirectory Get-ADGroup -Filter * -Properties Description | Select-Object Name, Description | Export-Csv -Path "C:\Reports\ADGroups.csv" -NoTypeInformation
مدير تقنية جديد يستلم الإدارة ويريد فهم هيكل المؤسسة التقني. يشغّل السكربت، يحصل على قائمة كاملة بـ 120 مجموعة مع وصف كل مجموعة، ويتمكن من رسم خريطة الصلاحيات في يوم واحد بدلاً من أسبوع من الاجتماعات.
إدارة المستخدمين في Active Directory تشبه إدارة مبنى سكني كبير. كل مستخدم هو ساكن له مفتاح شقته (كلمة المرور) وصلاحية دخول الأبواب المشتركة (المجموعات). مسؤول النظام هو حارس البناية: يمنح المفاتيح للسكان الجدد، يسحبها من المغادرين، ويتأكد أن لا أحد دخل غرفة غير مصرح له بها. السكربتات هنا هي نظام الأبواب الذكي الذي يفعل كل هذا بنقرة زر.
خلاصة إدارة المستخدمين والدليل النشط:
  • إدارة الحسابات المحلية — إنشاء وحذف وإضافة لمجموعات الصلاحيات بسهولة.
  • التكامل مع Active Directory لإدارة كلمات المرور وفك الأقفال عن بعد.
  • التدقيق الأمني عبر استخراج الحسابات المقفلة والمجموعات والصلاحيات.
  • تصدير جميع البيانات لملفات CSV للتوثيق والمراجعة الدورية.

📖 جدول المصطلحات

المصطلح (English)الترجمةالمفهوم
Active Directoryالدليل النشطخدمة مايكروسوفت لإدارة الهويات والصلاحيات في بيئات الدومين.
New-LocalUserإنشاء مستخدم محليأمر PowerShell لإنشاء حسابات مستخدمين على جهاز محلي دون واجهة رسومية.
Remove-LocalUserحذف مستخدم محليأمر يمسح حسابات المستخدمين المحليين بشكل دائم.
Get-ADUserالحصول على مستخدم ADأمر يجلب بيانات المستخدمين من قاعدة بيانات الدليل النشط.
Set-ADAccountPasswordتعيين كلمة مرور ADأمر يعيد تعيين كلمة المرور لحساب في الدليل النشط.
Unlock-ADAccountفك قفل حساب ADأمر يعيد تفعيل حساب مقفل في الدليل النشط.
Get-ADGroupMemberأعضاء مجموعة ADأمر يسرد جميع الأعضاء المنتمين لمجموعة معينة في الدليل النشط.

1️⃣ Check Network Connections — فحص الاتصالات الشبكية

📖 يتتبع كافة المنافذ المفتوحة والاتصالات النشطة لرصد أي نشاط شبكي مريب.
يستخدم الأمر Get-NetTCPConnection لعرض جميع اتصالات TCP مع تفاصيل العناوين المحلية والبعيدة والمنافذ وحالة كل اتصال، وهو أداة حيوية لتحليل الشبكة واكتشاف الاختراقات.
Get-NetTCPConnection | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess
محلل أمني يلاحظ حركة شبكة غير طبيعية على خادم قواعد البيانات. يشغّل السكربت، يكتشف اتصالاً غريباً من عنوان IP خارجي على منفذ غير معتاد. يغلق المنفذ فوراً ويحقق في مصدر الاتصال — يكتشف برنامجاً ضاراً وينظفه.

2️⃣ Ping Test — اختبار الاتصال بالشبكة

📖 يتحقق من وصول الاتصال لموقع معين بصمت، مما يسهل تشخيص مشاكل الإنترنت والشبكة.
يستخدم الأمر Test-Connection مع خيار Quiet لإجراء اختبار ping صامت يعيد قيمة True/False، وهو مثالي لدمجه في سكربتات المراقبة الآلية.
Test-Connection -ComputerName google.com -Count 4 -Quiet
شركة برمجيات تعاني من انقطاع متكرر في الاتصال بالإنترنت كل 30 دقيقة. مهندس الشبكة يبني سكربت مراقبة يشغّل هذا الأمر كل دقيقة ويسجل النتائج في ملف. بعد ساعة، يكتشف أن جهاز التوجيه (Router) يعيد التشغيل ذاتياً بسبب خلل حراري — يستبدله ويحل المشكلة.

3️⃣ Check Open Ports — فحص المنافذ المفتوحة

📖 يحدد كافة المنافذ التي تستمع للاتصالات والبرامج المسؤولة عنها لكشف أي ثغرات.
يستخدم Get-NetTCPConnection مع حالة Listen لرصد المنافذ المنتظرة للاتصالات، مع ربط كل منفذ بالعملية المسؤولة عنه (اسم البرنامج) لتحديد مصدره بدقة.
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess | ForEach-Object { $_ | Add-Member -NotePropertyName ProcessName -NotePropertyValue (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name -PassThru }
بعد تثبيت تطبيق جديد، المهندس يريد التأكد من عدم فتح منافذ غير ضرورية. يشغّل السكربت يكتشف أن التطبيق فتح منفذين إضافيين. يراجع الإعدادات ويغلق المنافذ غير المستخدمة، متبعاً مبدأ أمان "أقل الامتيازات".

4️⃣ Test Remote Port — اختبار منفذ بعيد

📖 يفحص إمكانية الوصول لمنفذ محدد على خادم بعيد لتشخيص مشاكل البريد والويب.
يستخدم الأمر Test-NetConnection مع تحديد اسم المضيف ورقم المنفذ، ويعيد تفاصيل دقيقة عن إمكانية الاتصال ووقت الاستجابة.
param($TestHost = "smtp.office365.com", $TestPort = 587) Test-NetConnection -ComputerName $TestHost -Port $TestPort -InformationLevel Detailed
فريق الدعم يتلقى بلاغاً أن البريد الإلكتروني لا يعمل. المهندس يشغّل السكربت لاختبار منفذ SMTP 587 على خادم Office365. يكتشف أن المنفذ محجوب من جدار الحماية المحلي — يفتحه ويعود البريد للعمل فوراً.

5️⃣ Export Event Logs — تصدير سجلات الأحداث

📖 يستخرج آخر الأحداث من سجل النظام ويصدرها لملف CSV لتسهيل تحليل الأخطاء.
يستخدم الأمر Get-WinEvent لاستعراض آخر الأحداث من سجل System مع تفاصيل المعرف والوقت والمستوى، مما يسرع تشخيص أعطال النظام.
Get-WinEvent -LogName System -MaxEvents 200 | Select-Object TimeCreated, Id, LevelDisplayName, Message | Export-Csv -Path "C:\Reports\SystemEvents.csv" -NoTypeInformation -Encoding UTF8
خادم يعيد تشغيل نفسه تلقائياً بدون سبب واضح. المهندس يصدر آخر 200 حدث من سجل النظام، يكتشف خطأ حرج متكرر رقم 1001 — يتعلق ببطاقة الشبكة. يحدّث تعريف الشبكة ويستقر الخادم بالكامل.

6️⃣ Enable Remote Desktop — تفعيل سطح المكتب البعيد

📖 يعدّل إعدادات السجل ويفتح جدار الحماية للسماح باتصالات سطح المكتب البعيد.
يعدّل Set-ItemProperty مفتاح التسجيل المسؤول عن منع اتصالات RDP إلى 0 (سماح)، ثم يفعل قاعدة جدار الحماية لمجموعة Remote Desktop — كل ذلك بسطرين فقط.
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name "fDenyTSConnections" -Value 0 Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
فريق الدعم يحتاج الوصول عن بعد إلى خادم جديد في مركز بيانات بعيد. بدلاً من السفر إلى الموقع لتعديل الإعدادات يدوياً، يشغّل المهندس السكربت عبر PowerShell عن بعد، ويفعّل RDP في 3 ثوانٍ.

7️⃣ Disable Windows Firewall — تعطيل جدار الحماية

📖 يعطّل جدار الحماية بالكامل لجميع الملفات الشخصية، مع تحذير مهم للاستخدام في البيئات الآمنة فقط.
يستخدم الأمر Set-NetFirewallProfile لتعطيل جدار الحماية للأنواع الثلاثة: Domain و Public و Private، وهو مفيد لاختبارات الشبكة لكنه خطر أمني في الإنتاج.
Set-NetFirewallProfile -Profile Domain, Public, Private -Enabled False
مهندس يختبر تطبيقاً جديداً يتصل بقاعدة بيانات ويجد أن الاتصال يفشل. يعطّل جدار الحماية مؤقتاً، ينجح الاتصال، فيعرف أن المشكلة في قاعدة جدار الحماية. يضيف قاعدة مخصصة بدلاً من تعطيل الجدار بالكامل — تطبيق آمن لأفضل الممارسات.

8️⃣ Start Remote PowerShell Session — بدء جلسة PowerShell عن بعد

📖 يفتح جسراً للتواصل المباشر مع خادم آخر لتنفيذ الأوامر التفاعلية عن بعد.
يستخدم الأمر Enter-PSSession لفتح جلسة تفاعلية مع خادم بعيد، وكأنك تجلس أمامه تماماً — كل أمر تكتبه يُنفّذ على الخادم البعيد مباشرة.
Enter-PSSession -ComputerName "RemoteHostName" -Credential (Get-Credential)
مسؤول أنظمة يدير 50 خادماً في مراكز بيانات موزعة حول العالم. بدلاً من استخدام برنامج طرف ثالث (مثل TeamViewer) لكل خادم، يفتح جلسة PowerShell عن بعد مع أي خادم في 3 ثوانٍ ويُنفّذ الأوامر مباشرة من سطر الأوامر.

9️⃣ Map Network Drive — ربط محرك أقراص شبكي

📖 يربط مجلد الشبكة بحرف محرك أقراص ليظل متاحاً للمستخدم حتى بعد إعادة التشغيل.
يستخدم الأمر New-PSDrive مع خاصية Persist لإنشاء محرك أقراص دائم يتصل بمجلد مشارك على الشبكة، مما يسهل الوصول للملفات المشتركة.
New-PSDrive -Name "Z" -PSProvider FileSystem -Root "\\fileserver\share" -Persist -ErrorAction SilentlyContinue
قسم المحاسبة يحتاج الوصول اليومي لمجلد الفواتير المشترك على الخادم. بدلاً من تعليم المستخدمين كيفية ربط محرك أقراص يدوياً، يُوزع المسؤول سكربتاً صغيراً على أجهزتهم يربط محرك Z تلقائياً عند تسجيل الدخول.

🔟 Disconnect Network Drive — فصل محرك أقراص شبكي

📖 يقطع الاتصال بمحرك الشبكة بأمان لمنع أخطاء الوصول عند تغيير مسارات الخوادم.
يستخدم الأمر Remove-PSDrive مع التحقق المسبق من وجود المحرك قبل فصله، وهو إجراء مهم عند إعادة تنظيم بنية مشاركات الملفات.
if (Get-PSDrive -Name "Z" -ErrorAction SilentlyContinue) { Remove-PSDrive -Name "Z" -Force }
الشركة تنتقل من خادم ملفات قديم (FileServer1) إلى خادم جديد (FileServer2). يوزع المسؤول سكربتاً يفصل محرك Z القديم ويربط محركاً جديداً بنفس الحرف متجهاً للخادم الجديد — انتقال سلس بدون تدخل المستخدم.
🔑 نصيحة أساسية: عند التعامل مع الاتصالات عن بعد، استخدم WinRM (Windows Remote Management) كبروتوكول آمن، وتأكد من تكوين TrustedHosts بشكل صحيح لتجنب أخطاء المصادقة. لا تعطّل جدار الحماية أبداً في بيئة الإنتاج — بدلاً من ذلك، أضف قواعد مخصصة.
خلاصة الشبكات والاتصال:
  • تحليل اتصالات الشبكة والمنافذ المفتوحة لاكتشاف الأنشطة المشبوهة.
  • اختبار الاتصال بالخوادم والمنافذ لتشخيص مشاكل الشبكة بدقة.
  • إدارة جدار الحماية وسطح المكتب البعيد عن بعد بأسطر قليلة من الكود.
  • ربط وفصل محركات أقراص الشبكة بشكل آلي لتجربة مستخدم سلسة.

📖 جدول المصطلحات

المصطلح (English)الترجمةالمفهوم
Get-NetTCPConnectionالحصول على اتصالات TCPأمر يعرض جميع اتصالات الشبكة النشطة والمنافذ المنتظرة في النظام.
Test-Connectionاختبار الاتصالأمر PowerShell الموازي لأمر ping لاختبار وصول الشبكة لجهاز معين.
Test-NetConnectionاختبار اتصال الشبكةأمر متقدم يختبر الاتصال بخادم ومنفذ محددين مع تفاصيل شاملة.
Get-WinEventالحصول على أحداث ويندوزأمر يستخرج الأحداث من سجلات ويندوز المختلفة للتحليل والتدقيق.
RDPسطح المكتب البعيدبروتوكول مايكروسوفت للتحكم عن بعد في أجهزة ويندوز.
Enter-PSSessionبدء جلسة PowerShellأمر يفتح جلسة تفاعلية مع خادم بعيد عبر PowerShell Remoting.
New-PSDriveإنشاء محرك أقراصأمر ينشئ محرك أقراص وهمي مرتبط بمجلد محلي أو مشاركة شبكية.

1️⃣ Create Scheduled Task — إنشاء مهمة مجدولة

📖 يبرمج السكربتات لتعمل تلقائياً في وقت محدد يومياً بأعلى الصلاحيات.
يستخدم Register-ScheduledTask مع مشغّل زمني يومي وإجراء لتشغيل PowerShell مع صلاحيات النظام SYSTEM، مما يضمن تنفيذ المهمة حتى في غياب المسؤول.
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"C:\Scripts\job.ps1`"" $trigger = New-ScheduledTaskTrigger -Daily -At 9am Register-ScheduledTask -TaskName "DailyJob" -Action $action -Trigger $trigger -RunLevel Highest -User "SYSTEM"
شركة تحتاج أرشفة يومية لملفات الفواتير كل ليلة عند الساعة 2 صباحاً. ينشئ مسؤول النظام مهمة مجدولة تشغّل سكربت الأرشفة تلقائياً كل يوم — دون الحاجة لتذكير أو تدخل بشري، ودون إزعاج المستخدمين أثناء العمل.

2️⃣ List All Installed Hotfixes — سجل التحديثات الأمنية العاجلة

📖 يسرد جميع التحديثات الأمنية العاجلة المثبتة على الخوادم للتحقق من مستوى الحماية.
يستخدم Get-HotFix مع Invoke-Command لجلب التحديثات من خوادم متعددة عن بعد وتصديرها لملفات منفصلة لكل خادم.
$servers = @("DC1","FILE01") foreach ($s in $servers) { Invoke-Command -ComputerName $s -ScriptBlock { Get-HotFix | Select-Object HotFixID, InstalledOn } | Export-Csv -Path "C:\Reports\$s-HotFixes.csv" -NoTypeInformation }
ثغرة أمنية حرجة (Zero-Day) تم الإعلان عنها اليوم. المدير الأمني يريد التأكد من تطبيق التصحيح على جميع الخوادم بحلول المساء. يشغّل المهندس السكربت على 10 خوادم، يكتشف أن خادمين لم يطبقا التصحيح — يثبتهما فوراً ويغلق الثغرة.

3️⃣ Install Windows Updates via PowerShell — تثبيت تحديثات الويندوز

📖 يقوم بتنزيل وتثبيت تحديثات الويندوز تلقائياً مع خيار إعادة التشغيل التلقائي.
يستخدم الوحدة النمطية PSWindowsUpdate مع خيارات القبول والتثبيت وإعادة التشغيل التلقائي، مما يؤتمت عملية التحديث بالكامل دون تدخل يدوي.
Install-Module -Name PSWindowsUpdate -Force -Scope AllUsers Import-Module PSWindowsUpdate Get-WindowsUpdate -AcceptAll -Install -AutoReboot
آخر ثلاثاء من الشهر — يوم التحديثات الشهرية. مسؤول الـ 30 خادماً يشغّل هذا السكربت على كل خادم جدولته زمنياً. التحديثات تُنزّل وتُثبّت تلقائياً قبل بداية الدوام، والخوادم تُعاد تشغيلها في أوقات الصيانة المحددة مسبقاً.

4️⃣ Get Printer Information — معلومات الطابعات

📖 يستعرض كافة الطابعات المتصلة والمشاركة ومنافذها لتسهيل الدعم الفني.
يستخدم الأمر Get-Printer لاستعراض جميع الطابعات المحلية والشبكية مع أسماء المشاركة والمنافذ، مما يساعد في اكتشاف الطابعات غير المستجيبة.
Get-Printer | Select-Object Name, ShareName, PortName, DriverName, Published
مستخدم يشتري طابعة جديدة ويطلب تثبيتها على الشبكة. المهندس يشغّل السكربت ليرى الطابعات الحالية، يكتشف أن هناك 3 طابعات بنفس الاسم — يرتب الأمور، يضيف الطابعة الجديدة باسم واضح، ويشاركها مع القسم.

5️⃣ Restart Print Spooler — إعادة تشغيل مدير الطباعة

📖 العلاج السحري لمشاكل الطباعة — يعيد تشغيل خدمة Spooler لإفراغ الطوابير العالقة.
يستخدم الأمر Restart-Service مع اسم الخدمة Spooler، وهو الحل الأول والأكثر فعالية لغالبية مشاكل الطباعة في بيئات ويندوز.
Restart-Service -Name "Spooler" -Force -ErrorAction Stop Write-Output "Print Spooler restarted."
قسم كامل مكون من 20 موظفاً لا يستطيع الطباعة — جميع الطلبات عالقة في الطابعة. مساعد الدعم يشغّل سكربت إعادة تشغيل Spooler عن بعد على خادم الطباعة، وفي 5 ثوانٍ تبدأ جميع الطلبات بالطباعة ويتنفس القسم الصعداء.

6️⃣ Remote Computer Reboot — إعادة تشغيل خادم بعيد

📖 يعيد تشغيل خادم بعيد وينتظر بصبر حتى يعود للعمل ويصبح مستجيباً للأوامر.
يستخدم الأمر Restart-Computer مع خيارات Wait وFor لتشغيل الخادم عن بعد والانتظار حتى يعود PowerShell للاستجابة، مما يضمن معرفة وقت التعافي بالضبط.
param([string]$Remote = "SERVER01") Restart-Computer -ComputerName $Remote -Force -Wait -For PowerShell
بعد تطبيق تحديث أمني عاجل على خادم الإنتاج، يحتاج المهندس لإعادة التشغيل. يشغّل السكربت، يعاد تشغيل الخادم، وينتظر السكربت بصبر حتى يعود الخادم للعمل. بمجرد استجابة PowerShell، يرسل السكربت تأكيداً — "الخادم جاهز". كل هذا دون جلسة تحكم مفتوحة.

7️⃣ Enable Windows Features — تفعيل ميزات ويندوز

📖 يفعل ميزات ويندوز المخفية مباشرة من سطر الأوامر دون الحاجة لوسائط تثبيت.
يستخدم الأمر Enable-WindowsOptionalFeature مع خيار Online لتفعيل ميزات مثل .NET Framework 3.5 مباشرة عبر الإنترنت دون الحاجة لقرص التثبيت.
Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -All
تطبيق محاسبة قديم يتطلب .NET Framework 3.5 للتشغيل، لكنها غير مثبتة على خادم الويندوز الحديث. مسؤول النظام يشغّل السكربت، وتُثبّت الميزة مباشرة من الإنترنت في دقيقتين دون الحاجة للبحث عن قرص التثبيت القديم.

8️⃣ Get Installed Server Roles — أدوار الخادم المثبتة

📖 يسرد كافة الأدوار المنصبة فعلياً على الخادم لتوثيق غايته ووظيفته.
يستخدم الأمر Get-WindowsFeature مع فلتر الحالة المثبتة لاستعراض الأدوار مثل Domain Controller أو DNS Server أو File Server.
Get-WindowsFeature | Where-Object {$_.Installed -eq $true} | Select-Object DisplayName, Name
فريق التدقيق يطلب توثيقاً فورياً لكل خادم في المؤسسة: ماذا يفعل كل خادم؟ يشغّل المهندس السكربت على 15 خادماً، يكتشف أن خادماً واحداً يحمل دوري Web Server وDatabase Server معاً — تكوين مخالف لسياسة الفصل بين الأدوار. يخطط لنقل قاعدة البيانات لخادم منفصل.
🔑 نصيحة أساسية: عند إنشاء المهام المجدولة، استخدم حساب SYSTEM بدلاً من حساب مسؤول عادي — فحساب النظام يمتلك صلاحيات كاملة ولا يتغير أو ينتهي. أيضاً، اختبر السكربت مع -WhatIf قبل أي تغيير على خوادم الإنتاج.
خلاصة الإدارة المتقدمة للنظام:
  • أتمتة المهام المتكررة عبر جدولة زمنية تعمل تلقائياً يومياً.
  • إدارة تحديثات الويندوز والتصحيحات الأمنية من سطر أوامر واحد.
  • التحكم في الطابعات والخدمات عن بعد دون الحاجة لزيارة الخادم فعلياً.
  • تفعيل ميزات وأدوار ويندوز برمجياً لتوحيد التكوين عبر المؤسسة.

📖 جدول المصطلحات

المصطلح (English)الترجمةالمفهوم
Register-ScheduledTaskتسجيل مهمة مجدولةأمر ينشئ مهمة زمنية في جدول مهام ويندوز لتشغيل سكربت تلقائياً.
Get-HotFixالحصول على التحديثات العاجلةأمر يعرض التصحيحات الأمنية المثبتة على نظام ويندوز.
PSWindowsUpdateوحدة تحديثات ويندوزوحدة PowerShell لإدارة تحديثات ويندوز بالكامل من سطر الأوامر.
Get-Printerالحصول على الطابعاتأمر يسرد جميع الطابعات المثبتة على النظام مع إعداداتها.
Restart-Serviceإعادة تشغيل خدمةأمر يوقف ويبدأ خدمة ويندوز من جديد لإصلاح الأعطال المؤقتة.
Enable-WindowsOptionalFeatureتفعيل ميزة ويندوزأمر يثبت ميزات ويندوز الاختيارية مثل .NET Framework.
Get-WindowsFeatureالحصول على أدوار الخادمأمر يعرض الأدوار والميزات المثبتة على خادم ويندوز Server.

1️⃣ Backup Files to Directory — نسخ احتياطي للملفات

📖 يستخدم أداة Robocopy لنقل البيانات لمجلد جديد يحمل تاريخ اليوم بدقة فائقة.
يجمع بين Robocopy مع خيار النسخ المتطابق /MIR في مسار وجهة يحمل تاريخ اليوم، لإنشاء نسخة احتياطية متطابقة وكاملة مع الاحتفاظ بسجل الإصدارات.
$Source = "C:\Data"; $DestRoot = "\\backupserver\backups" $Dest = Join-Path $DestRoot (Get-Date -Format yyyyMMdd) New-Item -Path $Dest -ItemType Directory -Force | Out-Null Robocopy $Source $Dest /MIR /Z /R:3 /W:5
شركة تصميم تفقد ملفات مشروع مهم بسبب تعطل القرص الصلب — ولحسن الحظ كان المسؤول قد جدول هذا السكربت للعمل كل مساء. يستعيد الفريق آخر نسخة احتياطية من خادم النسخ (مسار 20260626) ويخسر ساعة عمل واحدة فقط بدلاً من أسبوع كامل.

2️⃣ Compress Files to ZIP — ضغط الملفات

📖 يقوم بضغط المجلدات لملف ZIP لتوفير مساحة التخزين وتسهيل عملية النقل.
يستخدم مكتبة System.IO.Compression.FileSystem لإنشاء ملف ZIP مضغوط من مجلد محدد، مما يقلص حجم الملفات بنسبة تصل إلى 70%.
Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::CreateFromDirectory("C:\Logs", "C:\Backups\Logs.zip")
فريق التدقيق يطلب إرسال سجلات النظام لآخر 6 أشهر (حجمها 15 جيجابايت) عبر البريد. يشغّل المهندس السكربت لضغطها، يصبح الحجم 2 جيجابايت فقط، ويرفعها لرابط تحميل آمن بدلاً من إرسالها بالبريد.

3️⃣ Extract ZIP File — فك ضغط ملف ZIP

📖 يفك ضغط الملفات ويستعيد محتوياتها في المجلد المطلوب لاستعادة البيانات الأصلية.
يستخدم نفس المكتبة System.IO.Compression.FileSystem مع دالة ExtractToDirectory لاستخراج ملفات ZIP إلى وجهة محددة، مع الاحتفاظ بهيكل المجلدات الأصلي.
Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::ExtractToDirectory("C:\Backups\Logs.zip", "C:\Temp\Logs")
زميل في قسم آخر أرسل ملف ZIP مضغوط لبيانات المشروع. بدلاً من فتحه بالماوس والانتظار، يشغّل المهندس سكربت فك الضغط، وتُستخرج جميع الملفات المرتبة في مجلداتها خلال ثانية واحدة.

4️⃣ Copy Files Over Network — نسخ الملفات عبر الشبكة

📖 يحاول نسخ الملفات للشبكة 3 مرات متتالية مع فاصل زمني لتجاوز أي تذبذب في الاتصال.
يستخدم حلقة while مع Copy-Item لإعادة المحاولة تلقائياً عند فشل الاتصال، مع فاصل 5 ثوانٍ بين كل محاولة — مثالي للنسخ عبر شبكات غير مستقرة.
$source = "C:\Reports\*"; $dest = "\\fileserver\incoming\" $max = 3; $attempt = 0 while ($attempt -lt $max) { try { Copy-Item -Path $source -Destination $dest -Recurse -Force -ErrorAction Stop; break } catch { $attempt++; Start-Sleep -Seconds 5 } }
مندوب مبيعات في فندق يحاول رفع تقرير المبيعات اليومي لخادم الشركة، اتصال الفندق ضعيف. السكربت يحاول النسخ، يفشل في المرة الأولى بسبب انقطاع، ينتظر 5 ثوانٍ ويعيد المحاولة — ينجح في المحاولة الثانية. بدون هذا السكربت، لكان التقرير ضاع.

5️⃣ Sync Two Directories — مزامنة مجلدين

📖 يستخدم وسيط /MIR لمزامنة مجلدين بحيث تتطابق الوجهة مع المصدر بالكامل.
يستخدم Robocopy مع خيار /MIR (Mirror) لإنشاء نسخة مرآة كاملة — أي ملف يُحذف من المصدر يُحذف من الوجهة تلقائياً، مع الحفاظ على الصلاحيات والخصائص.
Robocopy "C:\Source" "D:\Destination" /MIR /Z /R:2 /W:5
خادم ويب يحتوي على 10,000 ملف موقع. بدلاً من رفع كل ملف على حدة عند التحديث، المطور يزامن مجلد التطوير المحلي مع مجلد الخادم. Robocopy يكتشف الملفات الجديدة والمعدلة والمحذوفة وينسخ فقط ما تغير — في ثوانٍ بدلاً من ساعات.

6️⃣ Get File Hash — التحقق من سلامة الملف

📖 يفحص "بصمة" الملف الرقمية للتأكد من عدم تلاعب أي جهة خارجية بمحتواه.
يستخدم الأمر Get-FileHash مع خوارزمية SHA256 لحساب التجزئة التشفيرية للملف، وهي بصمة رقمية فريدة — أي تغيير حتى بحرف واحد ينتج بصمة مختلفة تماماً.
Get-FileHash -Path "C:\Installers\package.exe" -Algorithm SHA256 | Format-List
فريق الأمن يحذّر من أن ملف تثبيت برنامج شهير قد تم اختراقه وتوزيعه معدلاً. المهندس يحسب بصمة SHA256 للملف عنده ويقارنها بالبصمة المنشورة على موقع المطور الرسمي — تتطابق، فيطمئن أن ملفه أصلي ونظيف.

7️⃣ Search Files by Extension — البحث عن الملفات بالامتداد

📖 ي isolates الملفات التي تجاوز عمرها 30 يوماً لتجهيزها للأرشفة وإدارة المساحة.
يستخدم Get-ChildItem مع بحث متكرر وفلتر اسم وفلتر تاريخ لاستعراض الملفات القديمة، مع عرض المساحة التي تشغلها لاتخاذ قرار الحذف أو الأرشفة.
Get-ChildItem -Path "C:\Logs" -Recurse -Filter "*.log" -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Select-Object FullName, Length, LastWriteTime
خادم الويب يتوقف فجأة — القرص الصلب ممتلئ تماماً. المهندس يشغّل سكربت البحث عن ملفات log القديمة، يكتشف أن سجلات HTTP تراكمت على 50 جيجابايت خلال 3 أشهر. يضغطها ويؤرشفها على خادم التخزين، ويحرر 45 جيجابايت فوراً.

8️⃣ Delete Old Files — التنظيف التلقائي

📖 يمسح الملفات المتقادمة تلقائياً للحفاظ على رشاقة القرص الصلب وتجنب امتلاء السعة.
يستخدم نفس منطق البحث عن الملفات القديمة لكن مع الأمر Remove-Item لحذفها تلقائياً، مع إمكانية جدولته شهرياً لأتمتة التنظيف بالكامل.
Get-ChildItem -Path "C:\Logs" -Recurse -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | ForEach-Object { Remove-Item $_.FullName -Force }
مسؤول نظام يقوم بجدولة هذا السكربت كليلة أول كل شهر — تنظيف آلي لجميع السجلات والملفات المؤقتة التي تتجاوز 30 يوماً. يوفر هذا الإجراء البسيط 10 جيجابايت شهرياً ويمنع توقف الخوادم بسبب امتلاء الأقراص.

9️⃣ Send Email Alert — إرسال تنبيه بريدي

📖 يرسل تنبيهاً فورياً للبريد الإلكتروني عند اكتمال أو فشل أي مهمة برمجية.
يستخدم الأمر Send-MailMessage مع خادم SMTP لتوجيه إشعارات فورية للمسؤولين، وهو أداة أساسية لأنظمة المراقبة والتنبيه الآلية.
Send-MailMessage -SmtpServer "smtp.contoso.com" -From "monitor@contoso.com" -To "admin@contoso.com" -Subject "Alert" -Body "Automated alert"
سكربت النسخ الاحتياطي الليلي فشل لأن القرص الوجهة كان ممتلئاً. بدلاً من أن يكتشف المسؤول المشكلة صباح اليوم التالي، يرسل هذا السكربت تنبيهاً فورياً إلى بريده في منتصف الليل. يستيقظ المسؤول، يوفر مساحة، ويعيد تشغيل النسخ — كل شيء جاهز قبل بداية الدوام.

🔟 Get File Hash (Advanced) — بصمة رقمية متقدمة للملفات

📖 أداة متقدمة للتحقق من سلامة الملفات باستخدام خوارزميات التجزئة المتعددة.
يتيح Get-FileHash اختيار خوارزميات متعددة مثل SHA256 أو MD5 أو SHA1، حيث تُستخدم كل خوارزمية وفقاً لمتطلبات الأمان المختلفة.
Get-FileHash -Path "C:\Installers\package.exe" -Algorithm SHA256 | Format-List
مطور ينشر تحديثاً جديداً لتطبيق الشركة. يولد بصمة SHA256 للملف وينشرها على موقع الشركة. المستخدمون يحملون التحديث ويحسبون البصمة — تتطابق، فيطمئنون أن الملف لم يُعترض أو يُعدّل أثناء التحميل.
النسخ الاحتياطي والملفات يشبه نظام الخزائن في منزل كبير. السكربت الأول (Backup) هو وضع مستنداتك الثمينة في خزنة جديدة كل يوم. السكربت الثاني والثالث (ZIP) هو ضغط المستندات في مظاريف لتوفير المساحة. السكربت الرابع (Network Copy) هو إرسال المظاريف عبر البريد السريع. السكربت الخامس (Sync) هو التأكد من أن كل نسخة في كل خزنة متطابقة. السكربت السادس (Hash) هو ختم الشمع الذي يثبت أن المظروف لم يُفتح. والسكربت التاسع (Email) هو جرس الباب الذي يخبرك أن الشحنة وصلت. منظومة متكاملة لحماية أثمن ما تملك — بياناتك.
خلاصة النسخ الاحتياطي والملفات والأتمتة:
  • نسخ احتياطي مؤتمت بالكامل باستخدام Robocopy مع الاحتفاظ بسجل زمني للإصدارات.
  • ضغط وفك ضغط الملفات لتوفير المساحة وتسهيل النقل عبر الشبكة.
  • مزامنة المجلدات والتحقق من سلامة الملفات عبر البصمات الرقمية.
  • التنظيف التلقائي للملفات القديمة وإرسال التنبيهات عند اكتمال أو فشل المهام.

📖 جدول المصطلحات

المصطلح (English)الترجمةالمفهوم
Robocopyنسخ الملفات القويأداة مايكروسوفت المتقدمة لنسخ ومزامنة الملفات مع دعم استئناف النسخ.
Get-FileHashالحصول على بصمة الملفأمر يحسب التجزئة التشفيرية للملف للتحقق من سلامته وأصالته.
SHA256خوارزمية التجزئة 256معيار تشفير ينتج بصمة رقمية فريدة لكل ملف لمنع التلاعب.
Get-ChildItemالحصول على العناصر الفرعيةأمر يسرد الملفات والمجلدات في مسار محدد مع خيارات بحث متقدمة.
Send-MailMessageإرسال رسالة بريديةأمر يرسل رسائل بريد إلكتروني عبر خادم SMTP من PowerShell.
Copy-Itemنسخ العنصرأمر أساسي لنسخ الملفات والمجلدات من مكان لآخر.
Remove-Itemإزالة العنصرأمر يحذف الملفات والمجلدات بشكل دائم من النظام.

🚀 الخاتمة

في نهاية هذا الدليل، نكون قد وضعنا بين يديك ترسانة برمجية مكونة من 50 سكربت PowerShell قادرة على تغيير طريقتك في إدارة الأنظمة للأبد. الأتمتة ليست مجرد رفاهية، بل هي ضرورة قصوى لضمان استقرار البنية التحتية وتقليل الأخطاء البشرية القاتلة. من خلال دمج هذه الأدوات في روتينك اليومي، ستنتقل من مرحلة الاستجابة للأعطال إلى مرحلة التنبؤ بها ومنعها قبل وقوعها. تذكر دائماً أن القوة الحقيقية لمدير النظام تكمن في ذكاء أدواته لا في كثرة مهامه اليدوية. ابدأ اليوم بتطبيق سكربت واحد، وستلاحظ فوراً كيف سيعود عليك ذلك بساعات من الراحة والإنتاجية العالية.

تعليقات



حجم الخط
+
16
-
تباعد السطور
+
2
-