私は、個人がコンピュータ名を提供することを可能にする廃止措置アプリケーションを構築しています。このユーティリティは外出し、さまざまな場所からコンピュータレコードをパージします。私はActive Directoryからコンピュータアカウントを削除しようとすると問題に遭遇しています。特定のOU構造内の「すべての子オブジェクトを削除する」権限しか持たないサービスアカウントを偽装しています。ドメイン管理者アカウントで実行すると、以下のコードが動作します。ただし、偽装されたサービスアカウントで実行すると「アクセスが拒否されました」というエラーが表示されます。 "runas"を使用してActive Directoryユーザーとコンピュータを起動し、サービスアカウントの資格情報を提供し、コンピュータオブジェクトを完全に細かく削除できるため、AD内のアクセス許可が正しいことを確認しました。AD内のコンピュータアカウントを削除する
誰かがこれまでに遭遇したことがあるかどうか、または私の現在のOU権限を引き続き利用している間にこれをコードする別の方法があるかどうかわかりません。私の腸は私に、 "DeleteTree"メソッドがオブジェクトを単に削除するよりもやっていると伝えます。
ご協力いただければ幸いです。
Sub Main()
Dim strAsset As String = "computer9002"
Dim strADUsername As String = "service[email protected].com"
Dim strADPassword As String = "password"
Dim strADDomainController As String = "domaincontroller.domain.com"
Dim objDirectoryEntry As New System.DirectoryServices.DirectoryEntry
Dim objDirectorySearcher As New System.DirectoryServices.DirectorySearcher(objDirectoryEntry)
Dim Result As System.DirectoryServices.SearchResult
Dim strLDAPPath As String = ""
Try
objDirectoryEntry.Path = "LDAP://" & strADDomainController
objDirectoryEntry.Username = strADUsername
objDirectoryEntry.Password = strADPassword
objDirectorySearcher.SearchScope = DirectoryServices.SearchScope.Subtree
objDirectorySearcher.Filter = "(&(ObjectClass=Computer)(CN=" & strAsset & "))"
Dim intRecords As Integer = 0
For Each Result In objDirectorySearcher.FindAll
Console.WriteLine(Result.Path)
Diagnostics.Debug.WriteLine("DN: " & Result.Path)
Dim objComputer As System.DirectoryServices.DirectoryEntry = Result.GetDirectoryEntry()
objComputer.DeleteTree()
objComputer.CommitChanges()
intRecords += 1
Next
If intRecords = 0 Then
Console.WriteLine("No Hosts Found")
End If
Catch e As System.Exception
Console.WriteLine("RESULT: " & e.Message)
End Try
End Sub
パーフェクト。はい、私は4.0を使用しているので、期待どおりに動作します。助けてくれてありがとう。 –