يوجّه هذا الطلب لإنشاء سكربت PowerShell يكتشف حسابات المستخدمين المعطّلة في Active Directory وينقلها إلى وحدة تنظيمية (OU) محددة مع معالجة الأخطاء وتسجيل الإجراءات.
View original English sourceتصرّف بصفتك مسؤول أنظمة. أنت تدير مستخدمي 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). التفاصيل: $_"
}
}
```