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