そのため、「ドメインコントローラがダウンしているか利用できないため、またはコンピュータアカウントが見つからなかったため、Windowsはドメインに接続できません。後でもう一度やり直してください。このメッセージが続く場合は、XPProワークステーションを使用しています。表示されたら、システム管理者に連絡してください。」ドメイン資格情報を使用してログインする場合。これを手動で修正するには、ローカル管理者アカウントでログインし、ワークグループにドロップして、ドメインに再度追加します。ただし、この問題が私の仕事で頻繁に発生することを考えると、このプロセスにはかなりの時間がかかる可能性があります。私がやろうとしているのは、ドロップ/再結合プロセスをプログラムで自動化することです。次のコードは機能しますが、コンピューターがドメインまたはワークグループに正しく存在する場合にのみ機能し、現在のように不安定な状態ではありません。
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
スクリプトが24行目にヒットしたとき:
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" & SystemName & "\root\cimv2")
「リモートサーバーマシンが存在しないか、使用できません:'GetObject'」というエラーが表示されます。この行は、マシンがドメイン内に正しく存在する場合、通常は機能します。ADオブジェクトは存在します。このエラーが発生した場合は、29行目のローカル管理者の資格情報を使用してマシンにログインするようにコーディングしています。
Set objWMIService = objwbemLocator.ConnectServer(SystemName, strNamespace, ComputerBLogin, ComputerBPass)
「SWbemLocator:アクセスが拒否されました」というエラーが表示されます。
したがって、両方の方法を使用すると、マシンがこの問題に直面しているときにWMIにアクセスする方法がありません。私の調査では、「ワークステーションとドメイン間の信頼関係が失敗した」ように見えますが、ローカル管理者の資格情報でログインできない理由を説明していません。
NETDOMに頼る必要はありませんでしたが、とにかくやってみました。失敗した信頼関係について話すこともエラーになります。
したがって、私の質問は次のとおりです
。A)このエラーメッセージが表示された場合、プログラムでワークステーションをワークグループにドロップし、ドメインに再度追加する方法はありますか?
B)ワークステーションとドメイン間の信頼関係をプログラムで修復しますか(それが実際に問題である場合)?
C)このエラーメッセージが表示されたら、管理者の資格情報を使用してワークステーションにログインしますか?
潜在的な支援を事前に皆に感謝し、さらに詳細が必要な場合は私に知らせてください。