حل مشكلة عدم دخول جهاز الدومين: Domain isn’t available وNLA وRPC وTrust Relationship باستخدام PowerShell
دليل عملي لتشخيص وإصلاح مشاكل أجهزة الدومين بدون تخمين وبأوامر PowerShell واضحة
1. أشهر رسائل الخطأ
هذه الرسائل قد تظهر منفردة أو مع بعضها. وجود واحدة منها لا يكفي لتحديد السبب النهائي، لكنه يوجهنا إلى مكان الفحص الصحيح.
| رسالة الخطأ | المعنى العملي | أول شيء أفحصه |
|---|---|---|
| We can't sign you in because your domain isn't available | الجهاز لا يستطيع التحقق من مستخدم الدومين حالياً. | DNS، الشبكة، DC، الوقت. |
| The domain controller cannot be contacted to perform NLA | RDP يعمل، لكن NLA لا يستطيع التحقق من المستخدم عبر الدومين. | وصول الجهاز إلى Domain Controller. |
| The RPC server is unavailable | فشل اتصال إداري عن بُعد عبر RPC أو WMI أو Firewall أو DNS. | Ports 135 و445 وFirewall وDNS. |
| The trust relationship between this workstation and the primary domain failed | العلاقة الآمنة بين الكمبيوتر والدومين مكسورة. | Test-ComputerSecureChannel. |
| There are currently no logon servers available | الجهاز لا يجد Logon Server مناسباً. | DNS وnltest والوصول إلى DC. |
2. كيف يعمل تسجيل الدخول في الدومين؟
حتى نفهم المشكلة، لازم نفهم ماذا يحدث عندما يكتب المستخدم حساب دومين مثل COMPANY\username.
- الجهاز يبحث عن Domain Controller باستخدام DNS Records خاصة بـ Active Directory.
- يتواصل مع خدمات مثل LDAP وKerberos وNetlogon.
- يتحقق من الوقت لأن Kerberos حساس جداً لفارق الوقت.
- يستخدم علاقة آمنة بين الكمبيوتر والدومين اسمها Secure Channel.
- إذا كان الدخول عبر RDP مع NLA، تتم عملية التحقق قبل فتح جلسة سطح المكتب.
لذلك المشكلة قد تكون من DNS، لكنها قد تكون أيضاً من Trust Relationship أو الوقت أو الشبكة أو Firewall أو Domain Controller نفسه.
3. الأسباب المحتملة وليس DNS فقط
| السبب | متى أتوقعه؟ | كيف أتأكد؟ |
|---|---|---|
| DNS غير صحيح | الجهاز يأخذ DNS خارجي أو DNS الراوتر بدل DNS الدومين. | Get-DnsClientServerAddress و Resolve-DnsName |
| Gateway أو VLAN أو Routing | الجهاز يصل لبعض الشبكة ولا يصل إلى DC. | Test-NetConnection DC01 -Port 389 |
| Domain Controller أو DNS Server متوقف | عدة أجهزة تتأثر بنفس الوقت. | فحص DC نفسه وخدمات DNS/AD DS. |
| فرق وقت | الدخول يفشل رغم أن DNS والشبكة صحيحان. | w32tm /query /status |
| Trust Relationship مكسور | الجهاز يرى DC لكن دخول الدومين يفشل برسالة Trust. | Test-ComputerSecureChannel -Verbose |
| Computer Account معطل أو محذوف | الجهاز موجود محلياً لكن حسابه في Active Directory غير سليم. | Get-ADComputer من جهاز الإدارة. |
| Snapshot أو Clone قديم | الجهاز رجع من Backup أو Image قديم. | غالباً Secure Channel يفشل. |
| Firewall أو RPC أو WinRM | الدخول محلياً يعمل لكن الإدارة عن بعد تفشل. | Ports 135/445/5985/3389. |
4. لماذا يدخل Local Admin بينما يفشل Domain User؟
الحساب المحلي مثل .\Administrator أو PC-01\Administrator يتم التحقق منه من داخل الجهاز نفسه. أما حساب الدومين مثل COMPANY\Administrator فيحتاج التواصل مع Domain Controller.
5. تجهيز متغيرات PowerShell
في كل الأوامر التالية، بدّل القيم حسب بيئتك. لا تنسَ تشغيل PowerShell كـ Administrator.
متغيرات تستخدمها في كل الفحوصات آمن
استخدم أسماء عامة في المقال، وعدّلها حسب دومينك وجهازك.
تجهيز متغيرات الدومين والجهاز
$ComputerName = "PC-01"
$DomainName = "company.local"
$DomainNetBIOS = "COMPANY"
$PreferredDC = "DC01.company.local"
$DomainDNS = @("10.10.10.10","10.10.10.11")6. تشخيص المشكلة من داخل الجهاز
إذا استطعت الدخول بـ Local Admin، فهذا أفضل مكان للتشخيص. ابدأ بأوامر القراءة فقط قبل أي إصلاح.
فحص هوية الجهاز والدومين آمن
يعرض هل الجهاز عضو دومين وما اسم الدومين المسجل عليه.
عرض اسم الجهاز والمستخدم الحالي
hostname whoami
فحص انضمام الجهاز للدومين
Get-CimInstance Win32_ComputerSystem |
Select-Object Name, Domain, PartOfDomain, Workgroupعرض معلومات النظام والدومين
systeminfo | findstr /B /C:"Domain" /C:"Logon Server"
فحص IP وDNS وGateway آمن
هذه الخطوة تكشف كثيراً من المشاكل، خاصة إذا كان الجهاز يأخذ DNS خارجي أو Gateway خاطئ.
عرض كل تفاصيل الشبكة
ipconfig /all
عرض DNS لكل كروت الشبكة عبر PowerShell
Get-DnsClientServerAddress -AddressFamily IPv4 |
Select-Object InterfaceAlias, ServerAddressesعرض إعدادات IP المختصرة
Get-NetIPConfiguration |
Select-Object InterfaceAlias, IPv4Address, IPv4DefaultGateway, DNSServerفحص العثور على Domain Controller آمن
إذا فشل هذا القسم، فلا تنتقل لإصلاح Trust قبل إصلاح DNS أو الشبكة.
اكتشاف Domain Controller
nltest /dsgetdc:company.local
فحص سجلات Active Directory DNS
Resolve-DnsName company.local Resolve-DnsName _ldap._tcp.dc._msdcs.company.local -Type SRV Resolve-DnsName _kerberos._tcp.company.local -Type SRV
فحص اتصال منافذ الدومين الأساسية
Test-NetConnection DC01.company.local -Port 53 Test-NetConnection DC01.company.local -Port 88 Test-NetConnection DC01.company.local -Port 389 Test-NetConnection DC01.company.local -Port 445
7. تشخيص المشكلة عن بُعد
إذا كنت على جهاز إدارة داخل الدومين، افحص أولاً هل اسم الجهاز يحل إلى IP صحيح وهل بورتات الإدارة مفتوحة.
فحص الجهاز من جهاز الإدارة آمن
هذه الأوامر لا تصلح المشكلة لكنها تحدد هل الجهاز قابل للإدارة عن بعد.
فحص Ping والاسم
Test-Connection PC-01 -Count 2 Resolve-DnsName PC-01
فحص منافذ RDP/RPC/SMB/WinRM
Test-NetConnection PC-01 -Port 3389 Test-NetConnection PC-01 -Port 135 Test-NetConnection PC-01 -Port 445 Test-NetConnection PC-01 -Port 5985
فحص حساب الكمبيوتر من Active Directory
Import-Module ActiveDirectory
Get-ADComputer PC-01 -Properties Enabled, LastLogonDate, PasswordLastSet, DistinguishedName |
Select-Object Name, Enabled, LastLogonDate, PasswordLastSet, DistinguishedName8. إصلاح DNS والشبكة باستخدام PowerShell
إذا كان DNS غير صحيح، أصلحه قبل أي عملية Trust Repair. أجهزة الدومين يجب أن تستخدم DNS الداخلي الخاص بالدومين، وليس DNS خارجي مثل Google أو Cloudflare.
تعديل DNS على الجهاز يحتاج Admin
نفذه من داخل الجهاز بعد الدخول بـ Local Admin. غيّر اسم InterfaceAlias حسب كرت الشبكة لديك.
عرض أسماء كروت الشبكة
Get-NetAdapter
تعيين DNS الدومين لكرت Ethernet
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 10.10.10.10,10.10.10.11 Clear-DnsClientCache ipconfig /registerdns
إرجاع DNS إلى DHCP إذا كان DHCP يوزع الإعدادات الصحيحة
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ResetServerAddresses
فحص النتيجة بعد تعديل DNS آمن غالباً
بعد تعديل DNS، لا تنتقل للإصلاح قبل التأكد أن الجهاز يرى الدومين.
فحص DNS الحالي
Get-DnsClientServerAddress -InterfaceAlias "Ethernet" -AddressFamily IPv4
فحص العثور على الدومين
Resolve-DnsName company.local nltest /dsgetdc:company.local
تحديث Group Policy بعد عودة الاتصال
gpupdate /force
9. إصلاح الوقت وKerberos
إذا كان DNS والشبكة صحيحين ومع ذلك يفشل الدخول، افحص الوقت. Kerberos حساس جداً لفارق الوقت بين الجهاز والدومين.
فحص وإصلاح الوقت آمن غالباً قد يحتاج Admin
ابدأ بالفحص، ثم أعد المزامنة من الدومين أو من مصدر وقت موثوق حسب تصميم بيئتك.
عرض حالة الوقت
w32tm /query /status
عرض مصدر الوقت الحالي
w32tm /query /source
إعادة المزامنة
w32tm /resync /force
إعادة تشغيل خدمة الوقت إذا لزم
Restart-Service w32time -Force w32tm /resync /force
10. فحص Secure Channel وTrust Relationship
إذا كان الجهاز يرى Domain Controller لكن تسجيل الدخول بالدومين يفشل أو تظهر رسالة Trust Relationship، افحص Secure Channel.
فحص علاقة الثقة مع الدومين آمن
هذه الأوامر لا تعدّل شيئاً، فقط تخبرك هل العلاقة سليمة أم مكسورة.
فحص Secure Channel
Test-ComputerSecureChannel -Verbose
فحص Secure Channel مع تحديد DC
Test-ComputerSecureChannel -Server DC01.company.local -Verbose
فحص معلومات الدومين باستخدام nltest
nltest /sc_query:company.local
| النتيجة | التفسير | الخطوة التالية |
|---|---|---|
| True | Secure Channel سليم. | ابحث في DNS/وقت/صلاحيات/RDP/NLA. |
| False | غالباً Trust Relationship مكسور. | جرّب Repair بدون إخراج الجهاز من الدومين. |
| الأمر يفشل ولا يجد DC | ليس وقت إصلاح Trust بعد. | أصلح DNS أو الشبكة أو الوقت أولاً. |
11. إصلاح الثقة بدون إخراج الجهاز من الدومين
هذه هي الطريقة المفضلة أولاً لأنها تحافظ على الجهاز داخل الدومين ولا تحتاج إعادة إنشاء عضوية الدومين من الصفر.
الطريقة الأولى: Test-ComputerSecureChannel -Repair مفضل أولاً يحتاج صلاحيات
نفذها من داخل الجهاز بعد الدخول بـ Local Admin. ستحتاج حساب دومين لديه صلاحية إصلاح/ضم الأجهزة.
إدخال بيانات حساب الدومين
$DomainCred = Get-Credential "COMPANY\Administrator"
إصلاح Secure Channel
Test-ComputerSecureChannel -Repair -Credential $DomainCred -Verbose
إصلاح مع تحديد Domain Controller
Test-ComputerSecureChannel -Repair -Server DC01.company.local -Credential $DomainCred -Verbose
إعادة التشغيل بعد نجاح الإصلاح
Restart-Computer -Force
الطريقة الثانية: Reset-ComputerMachinePassword مفيد يحتاج صلاحيات
استخدمها عندما تريد إعادة تعيين كلمة مرور حساب الكمبيوتر في الدومين من الجهاز نفسه.
إدخال Credential
$DomainCred = Get-Credential "COMPANY\Administrator"
إعادة تعيين Machine Account Password عبر DC محدد
Reset-ComputerMachinePassword -Server DC01.company.local -Credential $DomainCred
فحص النتيجة
Test-ComputerSecureChannel -Verbose
إعادة التشغيل
Restart-Computer -Force
12. إصلاح الثقة عن بُعد باستخدام PowerShell
يمكن الإصلاح عن بُعد إذا كان WinRM يعمل أو إذا استطعت استخدام Local Admin على الجهاز الهدف. إذا كانت بورتات WinRM أو Firewall مغلقة، ادخل Local Admin على الجهاز ونفذ الأوامر محلياً.
إصلاح Secure Channel عبر PowerShell Remoting يتطلب WinRM يحتاج صلاحيات
هذا السيناريو يستخدم Local Admin للدخول إلى الجهاز الهدف، ثم يستخدم Domain Credential لإصلاح الثقة.
تجهيز Credentials من جهاز الإدارة
$LocalCred = Get-Credential "PC-01\Administrator" $DomainCred = Get-Credential "COMPANY\Administrator"
تنفيذ الإصلاح عن بُعد
Invoke-Command -ComputerName PC-01 -Credential $LocalCred -ScriptBlock {
param($DomainCred)
Test-ComputerSecureChannel -Repair -Credential $DomainCred -Verbose
Restart-Computer -Force
} -ArgumentList $DomainCredإذا كان WinRM لا يعمل، افحص البورت
Test-NetConnection PC-01 -Port 5985
تفعيل WinRM محلياً عند الحاجة يحتاج Admin حسب سياسة الأمن
ينفذ من داخل الجهاز الهدف كـ Local Admin. لا تنفذه عشوائياً إلا حسب سياسة الشركة.
تفعيل PowerShell Remoting
Enable-PSRemoting -Force
تفعيل قواعد Firewall الخاصة بـ WinRM
Enable-NetFirewallRule -DisplayGroup "Windows Remote Management"
فحص WinRM
Test-WSMan localhost
13. إخراج الجهاز من الدومين وإعادته عند الحاجة
إذا فشل إصلاح Secure Channel، أو كان حساب الكمبيوتر محذوفاً/تالفاً، أو لا يمكن استعادة الثقة، عندها نستخدم Remove ثم Add للدومين. هذه الخطوة يجب أن تتم بخطة واضحة.
Checklist قبل Remove-Computer مهم جداً
أوامر فحص مهمة قبل الخروج من الدومين.
تأكد من وجود Local Admin
Get-LocalUser | Select-Object Name, Enabled, LastLogon
تأكد من أعضاء Administrators المحليين
Get-LocalGroupMember Administrators
تأكد من اسم الجهاز والدومين الحالي
Get-CimInstance Win32_ComputerSystem | Select-Object Name, Domain, PartOfDomain
تصدير معلومات الشبكة قبل التعديل
ipconfig /all > C:\Temp\network-before-domain-rejoin.txt
إخراج الجهاز من الدومين إلى Workgroup آخر حل يحتاج صلاحيات
نفذه من داخل الجهاز كـ Local Admin أو Domain Admin حسب الحالة. بعد التنفيذ سيعاد تشغيل الجهاز.
إدخال بيانات Domain Admin
$DomainCred = Get-Credential "COMPANY\Administrator"
الخروج من الدومين إلى WORKGROUP
Remove-Computer -UnjoinDomainCredential $DomainCred -WorkgroupName "WORKGROUP" -Restart -Force
إعادة ضم الجهاز إلى الدومين يحتاج صلاحيات
بعد إعادة التشغيل، ادخل بحساب Local Admin ثم نفذ Add-Computer.
إدخال Credential
$DomainCred = Get-Credential "COMPANY\Administrator"
الانضمام للدومين بدون تحديد OU
Add-Computer -DomainName "company.local" -Credential $DomainCred -Restart
الانضمام للدومين مع تحديد OU
$OU = "OU=Workstations,DC=company,DC=local" Add-Computer -DomainName "company.local" -Credential $DomainCred -OUPath $OU -Restart
فحص ما بعد إعادة الضم آمن
بعد دخول الجهاز للدومين مرة أخرى، نفذ هذه الأوامر للتأكد أن كل شيء سليم.
فحص الدومين
nltest /dsgetdc:company.local
فحص Secure Channel
Test-ComputerSecureChannel -Verbose
تحديث السياسات
gpupdate /force
تسجيل DNS
ipconfig /registerdns
14. حل مشاكل NLA وRDP وRPC
أخطاء NLA وRPC قد تظهر مع مشكلة الدومين نفسها، لكنها تحتاج فحصاً مستقلاً أيضاً.
فحص RDP وRPC وSMB وWinRM آمن للفحص إعادة التشغيل بحذر
نفذها من جهاز الإدارة باتجاه الجهاز المتأثر.
فحص المنافذ الأساسية
Test-NetConnection PC-01 -Port 3389 # RDP Test-NetConnection PC-01 -Port 135 # RPC Endpoint Mapper Test-NetConnection PC-01 -Port 445 # SMB / Remote Admin Test-NetConnection PC-01 -Port 5985 # WinRM HTTP
إعادة تشغيل الجهاز كخطة بديلة من PowerShell
shutdown /m \\PC-01 /r /f /t 0 /c "Restart by IT"
تفعيل RDP وقواعد Firewall من داخل الجهاز حل إنقاذ لا تترك NLA معطلة
ينفذ محلياً على الجهاز المتأثر كـ Local Admin.
تفعيل Remote Desktop
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnections -Value 0 Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
تعطيل NLA مؤقتاً عند الضرورة فقط
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name UserAuthentication -Value 0
إعادة تفعيل NLA بعد الإصلاح
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name UserAuthentication -Value 1
15. سكريبت تشخيص شامل جاهز
هذا السكريبت يجمع أهم الفحوصات في تقرير واحد. شغّله من داخل الجهاز المتأثر كـ Administrator.
سكريبت تشخيص شامل لمشاكل الدومين آمن للقراءة
عدّل اسم الدومين واسم DC ثم نفّذ السكريبت. السكريبت لا يصلح، فقط يشخص ويحفظ تقريراً.
Domain-Join-Diagnostic.ps1
$DomainName = "company.local"
$PreferredDC = "DC01.company.local"
$ReportPath = "C:\Temp\Domain-Diagnostic-$env:COMPUTERNAME.txt"
New-Item -ItemType Directory -Force -Path (Split-Path $ReportPath) | Out-Null
function Add-Report {
param([string]$Title, [scriptblock]$Command)
"`r`n===== $Title =====" | Tee-Object -FilePath $ReportPath -Append
try {
& $Command 2>&1 | Out-String | Tee-Object -FilePath $ReportPath -Append
} catch {
"ERROR: $($_.Exception.Message)" | Tee-Object -FilePath $ReportPath -Append
}
}
Add-Report "Computer and User" { hostname; whoami; whoami /all }
Add-Report "Computer Domain Membership" { Get-CimInstance Win32_ComputerSystem | Select-Object Name,Domain,PartOfDomain,Workgroup }
Add-Report "IP Configuration" { ipconfig /all }
Add-Report "DNS Client Servers" { Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object InterfaceAlias,ServerAddresses }
Add-Report "Resolve Domain" { Resolve-DnsName $DomainName; Resolve-DnsName "_ldap._tcp.dc._msdcs.$DomainName" -Type SRV }
Add-Report "Find Domain Controller" { nltest /dsgetdc:$DomainName }
Add-Report "Test DC Ports" {
Test-NetConnection $PreferredDC -Port 53
Test-NetConnection $PreferredDC -Port 88
Test-NetConnection $PreferredDC -Port 389
Test-NetConnection $PreferredDC -Port 445
}
Add-Report "Time Status" { w32tm /query /status; w32tm /query /source }
Add-Report "Secure Channel" { Test-ComputerSecureChannel -Verbose }
Add-Report "Group Policy Result" { gpresult /r }
Write-Host "Report saved to: $ReportPath" -ForegroundColor Green16. شجرة قرار سريعة
ترتيب التشخيص الصحيح
- هل الجهاز يدخل بـ Local Admin؟ إذا نعم، أكمل من الداخل.
- هل IP وGateway صحيحان؟ إذا لا، أصلح الشبكة.
- هل DNS هو DNS الدومين؟ إذا لا، أصلح DNS.
- هل nltest /dsgetdc ينجح؟ إذا لا، المشكلة ليست Trust بعد.
- هل الوقت صحيح؟ إذا لا، أصلح W32Time.
- هل Test-ComputerSecureChannel يرجع False؟ إذا نعم، أصلح Trust بدون Unjoin.
- إذا فشل الإصلاح، افحص حساب الكمبيوتر في AD.
- إذا الحساب محذوف أو الإصلاح فشل، استخدم Remove-Computer ثم Add-Computer.
17. أفضل الممارسات
- لا تعتمد على التخمين: ظهور NLA أو RPC لا يعني سبباً واحداً دائماً.
- ابدأ بأوامر القراءة: مثل ipconfig /all و nltest و Test-ComputerSecureChannel.
- لا تضع DNS خارجي على أجهزة الدومين: اجعل Forwarders على DNS Server.
- لا تخرج الجهاز من الدومين قبل التأكد من Local Admin: هذه أهم نقطة لتجنب قفل نفسك خارج الجهاز.
- وثق كل خطوة: اسم الجهاز، الوقت، الخطأ، الأمر المنفذ، والنتيجة.
- أعد تفعيل NLA بعد الحل: لا تتركه معطلاً لأن ذلك يقلل أمان RDP.
18. الأخطاء الشائعة
1. اعتبار DNS هو السبب دائماً
DNS سبب شائع، لكن ليس السبب الوحيد. إذا كان DNS صحيحاً و nltest ينجح، انتقل لفحص الوقت وSecure Channel.
2. إخراج الجهاز من الدومين مباشرة
هذا يضيع وقتاً وقد يسبب مشاكل إضافية. جرّب أولاً Test-ComputerSecureChannel -Repair و Reset-ComputerMachinePassword.
3. نسيان حساب Local Admin
بعد Remove-Computer لن تستطيع الدخول بحساب الدومين حتى تعيد ضم الجهاز. لذلك تأكد من Local Admin قبل أي خطوة.
4. تعطيل NLA وتركه معطلاً
تعطيل NLA قد يساعد في الإنقاذ، لكنه ليس حل المشكلة الحقيقي. بعد إصلاح الدومين، أعد تفعيله.
5. إعادة ضبط حساب الكمبيوتر من ADUC بدون خطة
Reset Account لحساب الكمبيوتر في Active Directory قد يجعل الجهاز يحتاج Repair أو Rejoin. لا تستخدمه كخطوة أولى.
19. الأسئلة الشائعة
هل سبب رسالة Domain isn’t available دائماً هو DNS؟
هل يمكن إصلاح Trust Relationship بدون إخراج الجهاز من الدومين؟
هل Remove-Computer يحذف ملفات المستخدم؟
هل تعطيل NLA حل دائم؟
متى أضطر لإخراج الجهاز من الدومين وإعادته؟
20. الخاتمة
مشاكل تسجيل الدخول إلى الدومين لا يجب التعامل معها بالعشوائية. رسالة Domain isn’t available أو NLA أو RPC Server Unavailable قد تكون من DNS، لكنها قد تكون أيضاً من فقدان الثقة بين الجهاز والدومين أو من الوقت أو الشبكة أو Firewall. الترتيب الصحيح هو: فحص الشبكة وDNS، ثم الوصول إلى Domain Controller، ثم الوقت، ثم Secure Channel، وبعدها فقط نقرر هل نصلح الثقة بدون إخراج الجهاز من الدومين أو نستخدم Remove وAdd كحل أخير.