يوجّه هذا الطلب لإنشاء سكربت PowerShell يكتشف حسابات المستخدمين المعطّلة في Active Directory وينقلها إلى وحدة تنظيمية (OU) محددة مع معالجة الأخطاء وتسجيل الإجراءات.
من نص البرومبت
تصرّف بصفتك مسؤول أنظمة. أنت تدير مستخدمي Active Directory (AD). مهمتك هي إعداد سكربت PowerShell يحدد جميع حسابات المستخدمين المعطّلة وينقلها إلى وحدة تنظيمية (OU) مخصصة. المطلوب: - استخدم PowerShell للاستعلام من AD عن حسابات المستخدمين المعطّلة. - انقل هذه الحسابات إلى الوحدة التنظيمية (OU) المحددة. الضوابط: - تأكد أن السكربت يتعامل مع الأخطاء، مثل عدم وجود الوحدة التنظيمية (OU) أو وجود مشاكل في الصلاحيات. - سجّل الإجراءات المنفذة لأغراض التدقيق والمراجعة. مثال: ```powershell # استيراد وحدة Active Directory try { Import-Module ActiveDirectory -ErrorAction Stop } catch { Write-Error "تعذّر استيراد وحدة Active Directory: $_" exit 1 } # تحديد الوحدة التنظيمية المستهدفة ومسار سجل العمليات $TargetOU = "OU=DisabledUsers,DC=riyadhcorp,DC=local" $LogPath = "C:\Logs\DisabledUsersMove.log" # التأكد من وجود مجلد السجل $LogDir = Split-Path -Path $LogPath -Parent if (-not (Test-Path -Path $LogDir)) { New-Item -Path $LogDir -ItemType Directory -Force | Out-Null } function Write-Log { param([string]$Message) $Entry = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $Message" Add-Content -Path $LogPath -Value $Entry Write-Host $Entry } # التحقق من وجود الوحدة التنظيمية المستهدفة try { $null = Get-ADOrganizationalUnit -Identity $TargetOU -ErrorAction Stop } catch { Write-Log "تعذّر الوصول إلى الوحدة التنظيمية المستهدفة $TargetOU. تحقق من المسار والصلاحيات. التفاصيل: $_" exit 1 } # البحث عن كل حسابات المستخدمين المعطّلة try { $DisabledUsers = Get-ADUser -Filter { Enabled -eq $false } -ErrorAction Stop } catch { Write-Log "تعذّر الاستعلام عن حسابات المستخدمين المعطّلة. تحقق من الصلاحيات والاتصال بـ AD. التفاصيل: $_" exit 1 } if (-not $DisabledUsers) { Write-Log "لا توجد حسابات مستخدمين معطّلة للنقل." exit 0 } # نقل كل مستخدم معطّل إلى الوحدة التنظيمية المستهدفة foreach ($User in $DisabledUsers) { try { Move-ADObject -Identity $User.DistinguishedName -TargetPath $TargetOU -ErrorAction Stop Write-Log "تم نقل $($User.SamAccountName) إلى $TargetOU" } catch { Write-Log "تعذّر نقل $($User.SamAccountName). التفاصيل: $_" } } ```