Nicht in der Lage, um auf WMI zuzugreifen, wenn die Meldung "Windows kann keine Verbindung zur Domäne" Fehlermeldung
Also ich hab ein XP-Pro-workstation, ist die Berichterstattung "Windows kann keine Verbindung zur Domäne herstellen, entweder weil der domain-controller ausgefallen ist oder anderweitig nicht verfügbar, oder weil Ihr Computerkonto nicht gefunden wurde. Bitte versuchen Sie es später erneut. Wenn diese Meldung weiterhin erscheint, Kontaktieren Sie Ihren system-administrator um Unterstützung." beim anmelden mit den Anmeldeinformationen für die Domäne. Um dies zu beheben, manuell würde ich einfach nach der Anmeldung mit dem lokalen admin-Konto, legen Sie es an einer Arbeitsgruppe, und dann erneut hinzufügen, um die Domäne. Dieser Prozess jedoch kann eine anständige Menge an Zeit zu überlegen, dieses Problem tauchte bei meiner Arbeit Recht Häufig. Was ich versuche zu tun, ist programmgesteuert automatisieren das löschen/Zusammenfügen-Prozess. Der folgende code funktioniert, aber nur, wenn der Rechner richtig in der Domäne oder Arbeitsgruppe, die nicht in der Schwebe, wie es jetzt ist.
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
Const WbemAuthenticationLevelPktPrivacy = 6
'On Error Resume Next
SystemName = "SystemName"
strNamespace = "root\cimv2"
ComputerBLogin = "LoginB"
ComputerBPass = "PassB"
ComputerALogin = "LoginA"
ComputerAPass = "PassA"
DomainName = "domain.com"
OU = "OU=desiredou,DC=domain,DC=com"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" & SystemName & "\root\cimv2")
If Err.Number <> 0 Then
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objwbemLocator.ConnectServer(SystemName, strNamespace, ComputerBLogin, ComputerBPass)
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
Err.Clear
End IF
Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputers
Return = objComputer.UnJoinDomainOrWorkGroup(NULL, NULL)
Return = objComputer.JoinDomainOrWorkGroup("WORKGROUP", NULL, NULL)
If Err.Number <> 0 Then
Set WshShell = CreateObject("WScript.Shell")
message = WshShell.Popup (SystemName & " could not be dropped to the workgroup!" & vbCr &_
"Error: " & Err.Description,, "Title", 0 + 16)
Else
Set WshShell = CreateObject("WScript.Shell")
message = WshShell.Popup (SystemName & " was successfully dropped to the WORKGROUP!",, "Title", 0 + 64)
End If
Next
For Each objComputer in colComputers
ReturnValue = objComputer.JoinDomainOrWorkGroup(DomainName, ComputerAPass, ComputerALogin, OU, JOIN_DOMAIN + ACCT_CREATE)
If Err.Number <> 0 Then
Set WshShell = CreateObject("WScript.Shell")
message = WshShell.Popup ("Unable to join " & SystemName & " to the domain! Please join manually.",, "Title", 0 + 16)
Else
Set WshShell = CreateObject("WScript.Shell")
message = WshShell.Popup ("Domain joining was successful!",, "Title", 0 + 64)
End If
Next
Wenn das Skript hat Zeile 24:
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" & SystemName & "\root\cimv2")
es Fehler mit "Der remote-server-Computer existiert nicht oder ist nicht verfügbar: 'GetObject'". Diese Zeile würde normalerweise funktionieren, wenn der Rechner richtig in der Domäne. Die AD-Objekt existiert. Wenn dieser Fehler, ich habe es so codiert, dass ein Protokoll in die Maschine mit dem lokalen admin-Anmeldeinformationen auf der Linie 29:
Set objWMIService = objwbemLocator.ConnectServer(SystemName, strNamespace, ComputerBLogin, ComputerBPass)
Wird ein Fehler ausgegeben, der mit "SWbemLocator: Zugriff verweigert."
Also mit beiden Methoden bin ich vertraut mit es gibt keinen Weg, um auf WMI zuzugreifen, wenn sich die Maschine in dieser Schwebe. In meiner Forschung, es scheint, als ob die "Vertrauensstellung zwischen der Arbeitsstation und der Domäne fehlgeschlagen" aber kann mir das nicht erklären, warum ich mich nicht anmelden mit der Administrator-Anmeldeinformationen.
Wollte ich nicht zu greifen, zu NETDOM, aber ich versuchte es trotzdem. Es Fehler, sowie reden über die fehlgeschlagene Vertrauensstellung.
Also meine Fragen sind:
A) Wenn diese Fehlermeldung vorhanden ist, gibt es eine Möglichkeit, programmgesteuert drop die Arbeitsstation einer Arbeitsgruppe und re-hinzufügen der Domäne?
B) Programmgesteuert Reparatur die Vertrauensstellung zwischen der Arbeitsstation und Domäne (Falls es das ist in der Tat, was ist falsch mit ihm)?
C) Wenn diese Fehlermeldung vorhanden ist melden Sie sich in die workstation mit Administrator-Anmeldeinformationen?
Danke an alle im Voraus für jede mögliche Hilfe und bitte lassen Sie mich wissen, wenn noch mehr details benötigt werden.
InformationsquelleAutor VoidnessMD | 2012-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich fühle mich ein bisschen dumm, nicht denken, dies früher aber Lizz ist erwähnen die Zuordnung der Fahrt gab mir zu denken. Ich habe versucht, das Laufwerk zuzuordnen, sondern es ständig verwenden wollte entweder meine aktuellen Anmeldeinformationen oder meine domain mit einer anderen domain-username. Also versuchte ich ".\LoginB" aber das sind nur MEINE computer-Namen, gefolgt von "LoginB". Ich landete mit "SystemName\LoginB" und war erfolgreich in der Lage, um das Laufwerk zuzuordnen. Mit, dass ich in der Lage war, korrigieren Sie den code oben durch die änderung der ComputerBLogin-variable die folgende, die in der Tat zu funktionieren:
Danke für die Glühbirne-moment Lizz!
InformationsquelleAutor VoidnessMD
Meines Wissens, die Beziehung mit einem host und Ihre domain kann nicht repariert werden, wenn es in diesem Zustand, wir haben nie in der Lage, das zu tun, progmatically. Tun so erfordert auch Ihre lokalen admin-und Active Directory-Konto-Anmeldeinformationen werden hart codiert in das Skript, das ist eine ziemlich riskante Prozess.
Stattdessen müssen Sie löschen Sie den host aus der AD-mithilfe Ihrer Anmeldeinformationen für die Domäne, dann starten Sie den host neu. Vielleicht nach seiner Entfernung aus dem AD werden Sie in der Lage, melden Sie sich mit lokalen admin-Anmeldeinformationen. Ein Weg, um zu replizieren, diese Bedingung für Testzwecke ist das löschen von einem test-PC das domain-Objekt dann neu starten und sehen, ob Sie sich authentifizieren können.
In das Ende, dies kann etwas sein, das können nur interaktiv. Und ich würde nicht WMI verwenden, da WMI hat mehr Sicherheits-Kontrollen und Einschränkungen, als dies bei anderen Methoden, wie der Beginn eines psexec-Sitzung mithilfe von RPC kopieren und ausführen eines Skripts auf die beschädigte host.
Das Skript im link oben fordert Sie für die AD-Anmeldedaten. Dieser link meint man das Skript ausführt, mit denen creds, wie folgt.
Zwar nicht in der Domäne die OS-firewall könnte "Frühling" zu blockieren alle ports, aber RDP (Port 3389). In diesem Zustand können Sie eine Verbindung zum RPC-ports? Dies sind die TCP-ports 135, 139 und 445. support.microsoft.com/kb/187628 Telnet ist ein einfacher Weg, um eine Verbindung zu TCP-ports. 🙂
Ausgezeichnete Vorschlag! Also alle ports, die Sie erwähnt (3389, 135, 139 und 445) verbinden Sie richtig. Obwohl standard-telnet (23) fehl. So wissen wir, dass einige ports gesperrt sind und einige sind auch jetzt nicht. Also, wie würde ich mein script anweisen, nur die Kommunikation über einen port freigegeben oder ist das möglich?
Die meisten Funktionen, die Sie tun können gegen RDP anmelden. Ihr Skript bereits über RPC kommuniziert, die offen ist, so können Sie ordnen Sie das Laufwerk dem beschädigten Wirts C$ mit den lokalen admin? Die einzige Verbindung, die ich kenne, die funktioniert für Sie sicher, dass in diesem Fall ein domain-service-Konto läuft mit admin creds als einen gültigen service-auf die beschädigte host - und der Dienst muss in der Lage sein, "erzählt" nichts zu tun. Lokale admin-creds haben ein flaues Geschichte in diesem Fall. Die einzige andere Sache, die ich denken kann, ist mit einem manuell erstellten lokalen admin-Konto, nicht die eingebauten. Arbeiten auf Rauch hier..
Ein weiterer Gedanke: es ist keine direkte Lösung, aber könnte ein script erstellen, lauffähig auf allen PC ' s regelmäßig zu prüfen, ob eine bestimmte lokale admin-Konto anmeldet (mit RDP oder was auch immer), wenn das Ereignis erkannt wird, wird die PC-basierte Skript automatisch "etwas" - was auch immer Sie wollen. Nur so ein Gedanke..
InformationsquelleAutor Lizz