Existem dois problemas aqui.
-
O CMDlet
Get-QADPermission
está gravando diretamente no console durante a execução, e é por isso que você está vendoPermissions for: ...
. Como o pipeline está escrevendo para a mesma saída, tudo fica misturado. Armazene a saída do seu pipeline para uma variável. -
Quando você canaliza o grupo para
Get-QADPermission
, você está jogando fora o objeto do grupo e obtendo um objeto de permissão. Se você quiser manter o objeto original, você precisa filtrar com Where-Object.
Além disso, tenha cuidado com Get-QADPermission
. Se você consultar apenas WriteProperty
, ele não retornará resultados com acesso de leitura + gravação. Normalmente você quer consultar os dois. E, na maioria dos casos, você também deseja usar -Inherited
para obter permissões concedidas pelas OUs pai. Se você realmente está procurando permissões únicas, pode ignorar essa opção.
function Test-UserCanModifyGroupsInOU ($Username, $OU)
{
$results = Get-QADGroup -SearchScope 'OneLevel' -SearchRoot $OU |
Where-Object {
$_ | Get-QADPermission -Rights ReadProperty,WriteProperty -Property member -Account $username
} |
Select @{Name="User";Expression={$username}}, @{Name="Group";Expression={$_.Name}}
$results | Write-Output
$results | Export-Csv "$username.csv"
}
@("bob","sally") |
ForEach-Object {
Test-UserCanModifyGroupsInOU -Username $_ -OU 'domain.org.com/path/to/OU'
}
Observe também que isso só funciona para permissões em propriedades específicas. Ele não retornará resultados para um usuário que tenha "Controle Total" no grupo, mesmo que eles ainda possam modificar o atributo do membro.