Isso parece funcionar (talvez com uma ressalva), para encontrar todas as pastas às quais o usuário "someuser" tem acesso, neste exemplo na unidade C, usando o comando icacls interno do Windows:
icacls c:\*. /findsid someuser /t /c /l
O / t é necessário para instruí-lo a recursar diretórios. O / c é necessário para dizer a ele para continuar, mesmo que encontre erros. O / l faz funcionar com links simbólicos (se houver). (Esse último é um L e esses sinalizadores podem ser maiúsculos ou minúsculos.)
O *.
será reconhecido pelo DOS veteranos como a maneira de dizer "olhar para os diretórios, não arquivos". Obviamente, se você deseja encontrar arquivos e não pastas, altere-o para *.*
, e é claro, você pode apontá-lo para qualquer unidade ou executá-lo em qualquer pasta e deixar o caminho da unidade / pasta e deixá-lo pesquisar em relação a isso somente pasta.
Procurei a mesma resposta que o OP e encontrei essa entrada, mas fiquei chateado ao ver apenas uma oferta baseada em uma ferramenta para download. Como outros, eu preferi usar algo embutido, e o encontrei, nesta ferramenta icacls.
E confirmei que funciona no Windows Server 2012, 2008 e Windows 7, por isso suspeito que funcione também no Server 2003, Windows 8 e assim por diante.
A lista resultante será pastas indicadas linha após linha, como:
SID encontrado: c: \ somedir \ somesubdir.
Observe que, se você executar isso como um usuário que não possui permissões para alguns diretórios serem atravessados, obterá erros intercalados nos resultados, como:
c: \ System Volume Information: acesso negado.
E se você estiver pesquisando uma unidade inteira, isso poderá resultar em centenas desses erros, dificultando a localização dos resultados.
Alguns podem pensar que a resposta é executar a linha de comando como administrador, mas isso simplesmente fará com que muito mais erros apareçam, pois agora você estará percorrendo pastas que estavam ocultas anteriormente.
Agora, se você estava interessado em ocultar esses erros, não poderá usar um comando find para canalizar apenas os resultados com êxito (aqueles que se referem a "SID encontrado"), porque os erros NÃO serão filtrados pelo canal até o comando find. Em vez disso, se você deseja remover todos os erros, é necessário usar o truque obscuro de redirecionar o fluxo de erros (stderr) para o "bloco de bits" usando 2>nul:
. Portanto, o exemplo acima se tornaria:
icacls c:\*. /findsid someuser /t /c /l 2>nul:
Apenas lembre-se de que algumas das pastas que geraram esses erros, que agora estão ocultos, podem ser pastas às quais o nome "someuser" TEM acesso, mas VOCÊ NÃO. Portanto, você pode pensar duas vezes sobre simplesmente ignorar esses erros. mas se você quiser, é assim que você pode fazer.
Essa possibilidade limita potencialmente o valor dessa resposta, eu percebo. Se alguém com mais familiaridade com as coisas gostaria de expandir ou corrigir minha resposta, eu gostaria.