Wie überprüfe ich, ob ein NTAccount-Objekt eine Gruppe oder einen Benutzer darstellt?

Wenn mit den von @ zurückgegebenen Zugriffsregeln gearbeitet wi

GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))

Wie kann ich feststellen, ob das NTAccount-Objekt, auf das in jeder Regel verwiesen wird, ein Benutzerkonto oder eine Gruppe ist?

Aktualisieren

Ich konnte dies wie folgt lösen. Beachten Sie, dass dieser Code die Absicht hat, @ zurückzugebeTrue wenn dasNTAccount ist eine Gruppe undFalse andernfalls oder wenn bei der Überprüfung ein Fehler auftritt.

Gibt es einen besseren Weg, dies zu tun?

Public Function IsGroup(ByVal account As NTAccount) as Boolean  
    Dim samAccountName as string = account.Value  
    Dim accountNameParts() As String = samAccountName.Split("\")  
    If accountNameParts.Count() = 2 Then  
        Dim principalContext As PrincipalContext  
        Try  
            principalContext = New PrincipalContext(ContextType.Domain, accountNameParts(0))  
        Catch  
            Try  
                principalContext = New PrincipalContext(ContextType.Machine, accountNameParts(0))  
            Catch  
                principalContext = Nothing  
            End Try  
        End Try  
        If Not principalContext Is Nothing Then  
            Dim principal As Principal  
            principal = principal.FindByIdentity(principalContext, _samAccountName)  
            If Not principal Is Nothing then   
                return TypeOf principal Is GroupPrincipal  
            End If  
        End If  
    End If  
    Return False  
End Function

Ein weiteres Update:

Die oben genannte Lösung war für die meisten Server \ Account-Objekte in Ordnung, schlägt jedoch für lokale Gruppenobjekte auf den EMC Celerra NAS-Servern fehl. Ich versuche, die Win-API-Aufrufe von NetUserGetInfo / NetLocalGroupGetInfo zu verwenden, um zu überprüfen, ob dies funktioniert. Ich kann jedoch nicht sicherstellen, dass sie ordnungsgemäß funktionieren. Sehen NetUserGetInfo / NetLocalGroupGetInfo gibt Fehler 1722 zurück für mehr Details

Antworten auf die Frage(4)

Ihre Antwort auf die Frage