Você não pode obter as informações que está procurando diretamente da IdentityReference, mas se você lançar alguma lógica (não muito diferente da direção que você já estava indo para filtrar as contas SID), você pode reduzi-la a apenas Objetos 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
}
}
}
A maior parte do trabalho aqui é feita por essa instrução "if". O teste de uma barra invertida garante que o objeto faça parte de um domínio de algum tipo (local ou AD ou outro). Em seguida, ele lança fora os domínios locais que eu estava vendo no meu teste.
No meu caso, isso foi o suficiente para garantir que eu estivesse sempre obtendo objetos do AD, sejam eles usuários ou grupos, e depois disso é muito simples obter o ADObject e testar sua classe de objeto.
Se você estiver fazendo isso em um ambiente com apenas um domínio, você pode alterar a instrução if para procurar apenas isso, o que reduziria o número de casos de teste, por exemplo:
if ($Identity -like 'test.domain.com\*)
Você também pode levar isso adiante e obter o objeto ADGroup real, etc.