Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net ASP.NET-删除AD中的计算机帐户_Vb.net_Active Directory - Fatal编程技术网

Vb.net ASP.NET-删除AD中的计算机帐户

Vb.net ASP.NET-删除AD中的计算机帐户,vb.net,active-directory,Vb.net,Active Directory,我正在构建一个退役应用程序,允许个人提供计算机名,该实用程序将从各个位置清除计算机记录。尝试从Active Directory中删除计算机帐户时遇到问题。我正在模拟一个服务帐户,该帐户只有在特定OU结构中“删除所有子对象”的权限。如果我使用我的域管理员帐户运行下面的代码,则代码可以正常工作;但是,当我使用模拟服务帐户运行它时,由于“访问被拒绝”而失败。我已经验证了AD中的权限是正确的,因为我可以使用“runas”启动Active Directory用户和计算机,并提供服务帐户凭据,而且我可以完全

我正在构建一个退役应用程序,允许个人提供计算机名,该实用程序将从各个位置清除计算机记录。尝试从Active Directory中删除计算机帐户时遇到问题。我正在模拟一个服务帐户,该帐户只有在特定OU结构中“删除所有子对象”的权限。如果我使用我的域管理员帐户运行下面的代码,则代码可以正常工作;但是,当我使用模拟服务帐户运行它时,由于“访问被拒绝”而失败。我已经验证了AD中的权限是正确的,因为我可以使用“runas”启动Active Directory用户和计算机,并提供服务帐户凭据,而且我可以完全删除计算机对象

想知道是否有人以前遇到过这种情况,或者在仍然使用我当前的OU权限的情况下,是否有其他方法来编写这种代码。我的直觉告诉我,“DeleteTree”方法所做的不仅仅是删除对象

任何协助都将不胜感激

Sub Main()
    Dim strAsset As String = "computer9002"
    Dim strADUsername As String = "serviceaccount@domain.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

如果您使用的是.NET 3.5及更高版本,则应检查
System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。请在此处阅读所有相关内容:

基本上,您可以定义域上下文并在AD中轻松找到用户和/或组:

' set up domain context
Dim ctx As New PrincipalContext(ContextType.Domain, "DOMAIN", strADUsername, strADPassword)

' find a computer
Dim computerToDelete As ComputerPrincipal = ComputerPrincipal.FindByIdentity(ctx, strAsset)

If computerToDelete IsNot Nothing Then
    ' delete the computer, if found
    computerToDelete.Delete()
End If

新的S.DS.AM使得在广告中与用户和群组进行互动变得非常容易

删除树与删除不同。您需要在子计算机对象上具有“删除子树”权限才能执行此操作。

Perfect。是的,我使用的是4.0,所以它按预期工作。非常感谢你的帮助。