Вы не можете получить информацию, которую вы ищете, непосредственно из IdentityReference, но если вы добавите в нее некоторую логику (в отличие от направления, которое вы уже направлялись, чтобы отфильтровать учетные записи SID), вы можете сузить ее до просто объектов AD.
(Get-Acl -Path $Folder.FullName | ForEach-Object {
[string]$Identity = $_.IdentityReference
if ($Identity -like '*\*' -and $Identity -notlike 'BUILTIN*' -and $Identity -notlike 'NT AUTHORITY*') {
$SamAccountName = $Indentity.Split('\')[1]
$ADObject = Get-ADObject -Filter ('SamAccountName -eq "{0}"' -f $SamAccountName)
if ($ADObject.ObjectClass -eq 'group') {
$Identity
}
}
}
Большая часть работы здесь выполняется с помощью этого заявления "если". Тестирование на обратную косую черту гарантирует, что объект является частью какого-либо домена (локального или AD или другого). Затем он выбрасывает локальные домены, которые я видел при тестировании.
В моем случае этого было достаточно, чтобы убедиться, что я всегда получаю объекты AD, будь то пользователи или группы, и после этого довольно просто получить ADObject и протестировать его объектный класс.
Если вы собираетесь делать это в среде только с одним доменом, вы можете изменить оператор if, чтобы искать только его, что сократит количество тестов, например:
if ($Identity -like 'test.domain.com\*)
Вы также можете пойти дальше и получить реальный объект ADGroup и т.д.