确定计算机是否在AD组中

时间:2015-05-20 14:02:05

标签: vb.net

我希望确定计算机是否是AD组的成员,或者甚至使用VB.net获取属于AD组成员的所有计算机。我找到了几个用于检查用户是否是组成员但没有用于检查计算机的示例。我希望转换此功能以搜索组中的计算机,但我没有成功。任何援助将不胜感激。提前谢谢。

Function IsInGroup(GroupName) As Boolean
    Dim MyIdentity As System.Security.Principal.WindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()
    Dim MyPrincipal As System.Security.Principal.WindowsPrincipal = New System.Security.Principal.WindowsPrincipal(MyIdentity)
    Return MyPrincipal.IsInRole(GroupName)
End Function

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

Function IsInGroup(PCName As String, groupName As String) As Boolean
      Dim vUsuario As New NTAccount(PCName & "$")
      Dim sid As SecurityIdentifier = vUsuario.Translate(GetType(SecurityIdentifier))

      Using vRootDSE As New DirectoryEntry("LDAP://rootDSE")
         Using vSearcher As New DirectorySearcher(New DirectoryEntry("LDAP://" + CStr(vRootDSE.Properties("defaultNamingContext")(0))), "(objectSID=" & sid.ToString() & ")", New String() {"memberOf"}, SearchScope.Subtree)
            Dim src As SearchResultCollection = vSearcher.FindAll()

            Dim memberOf As ResultPropertyValueCollection = src(0).Properties("memberOf")
            For i As Integer = 0 To memberOf.Count - 1
               'Debug.Print(memberOf(i).ToString())

               ' I don't really like this approach, but it's quick to write ;)
               If memberOf(i).ToString().Contains("=" & groupName & ",") Then
                  Return True
               End If
            Next

         End Using

      End Using

      Return False
   End Function

答案 1 :(得分:0)

如果您正在寻找CURRENT PC,那么会容易一些。

    Function Is_CurrentPC_InADGroup(groupName As String) As Boolean
        if groupName = "" then Return True
        Using context = New PrincipalContext(ContextType.Domain, Environment.GetEnvironmentVariable("USERDOMAIN"))
            Dim principal = ComputerPrincipal.FindByIdentity(context, Environment.MachineName)
            Dim groups = principal.GetGroups()

            For Each group In groups
                If group.ToString = groupName Then Return True
            Next
        End Using
        Return False
    End Function