Encontrei uma entrada no fórum isso pode ajudar.
Aqui está um trecho:
if (($args.Count) -eq 2) {
$dir = $args[0]
if ((Test-Path $dir) -eq $true) {
$script:FoldersFound = New-Object System.Collections.ArrayList
$GroupName = $args[1]
$folders = Get-ChildItem $dir -Recurse | Where-Object {$_.PSIsContainer}
foreach($folder in $folders) {
$ACL = Get-Acl -Path $folder.FullName
foreach($ACE in $ACL.access) {
if (($ACE.IdentityReference) -like "*\$GroupName") {
if (($ACE.IsInherited) -eq $false) {
$FoldersFound.Add($folder.FullName) | Out-Null
break
}
}
}
}
$FoldersFound.Sort()
foreach($folder in $FoldersFound) {
Write-Host $folder
}
}
} else {
Write-Host "Syntax:" $MyInvocation.MyCommand.Name """path""" """Group Name"""
}
Salve o código acima como <filename>.ps1
e execute-o a partir do prompt do PowerShell com dois argumentos: "Caminho da pasta" seguido de "nome do grupo".
Exemplo: navegue até a pasta onde você salvou o script e digite o seguinte, onde <filename>
é (obviamente) o nome que você deu ao arquivo e substitua o caminho e o nome do grupo pelo seu próprio:
.\<filename>.ps1 "C:\Users" "Administrators"
Agora lembre-se de que não há tratamento de erros no script, portanto, ele não cuida dos erros de acesso negado ou dos nomes de caminho muito longos, por exemplo.
O crédito vai para Andreas Hultgren, MCTS, MCITP .