icacls é a resposta aqui: link
Ele permitirá que você altere as acls de um número de pastas
Tenho várias centenas de pastas que contêm uma subpasta chamada "Documentos de lance".
Eu preciso alterar as permissões da ACL em todas as instâncias das pastas "Documentos de lance".
Existe uma maneira de automatizar esse processo? Foi-me dito que vbscript não é uma boa escolha para lidar com as permissões da ACL. Estou imaginando um script powershell ou algo semelhante que pesquisará automaticamente a hierarquia de pastas inteira e adicionará a permissão da ACL especificada a cada pasta chamada "proposta", mas não sei se isso é realmente possível ou se há alguma outra maneira de realizar essa tarefa.
Pensamentos, alguém?
Editar: A caixa de comentários continua atrapalhando o meu comando real do powershell que deve ser o seguinte:
Get-ChildItem "e:\datastore\marcstone bids\*\*\*\Bid Documents" | where {$_.Attributes -eq 'Directory'}
O problema é que, às vezes, a pasta Propostas nem sempre é de três camadas nos lances de Marcstone, mas às vezes apenas duas camadas, por isso, quando tento o seguinte:
Get-ChildItem "e:\datastore\marcstone bids\*\*\Bid Documents" | where {$_.Attributes -eq 'Directory'}
Observe como a segunda versão tem apenas dois * Esta versão não consegue encontrar nenhuma pasta, embora haja muitas. Por quê?
Edite novamente: Isso continua ficando mais interessante. Ao examinar os resultados retornados pelo comando bem-sucedido, descobri que ele só retorna as pastas "Documentos de lance" que estão vazias. Todas as pastas "Documentos de lance" que contenham arquivos não serão retornadas. Por quê?
Edite novamente: Mudei o comando para o seguinte e ele retornou TODAS as pastas "documentos de lance".
Get-ChildItem "e:\datastore\marcstone bids\*\*\*\Bid Documents" | where {$_.Attributes -match 'Directory'}
Agora, aprenda a usar icacls para alterar as permissões.
Edite novamente: OK, acho que tenho a sintaxe correta para icacls com isso:
icacls *filename* /deny special-restrict1:(f)
Então, POR FAVOR, alguém me ajude a conectar esses dois comandos juntos.
Experiências com uma variável como esta:
$var = Get-ChildItem "e:\datastore\marcstone bids01-350001-175002 Morrow M
emorial Home - Sparta WI\Bid Documents" | where {$_.Attributes -match 'Directory'} | icacls $var /deny special-restrict1
:/F
Eu selecionei uma pasta específica para fins de experimentação. O comando retorna o seguinte erro:
First parameter must be a file name pattern or "/?"
Pensamentos, alguém?
icacls é a resposta aqui: link
Ele permitirá que você altere as acls de um número de pastas
não tenho certeza se isso ajudará, mas aqui vai:
você tentou apenas armazenar o Caminho da pasta que deseja em uma variável ($ caminho E: \ datastore \ marcstone lances *** \ Bid Documents)
Eu não tenho o ambiente correto configurado, mas apenas um pensamento
Tente algo ao longo destas linhas:
Get-ChildItem "e:\datastore\marcstone bids\*" -include "Bid Documents" -directory -recurse
O parâmetro -recurse deve encontrar todos os subdiretórios, independentemente de quão profundos estejam aninhados. O parâmetro -directory deve limitar a pesquisa apenas a pastas (diretórios). Eu posso ter a sintaxe um pouco errada, mas ela deve apontar você na direção certa.
De lá, você deve conseguir canalizar os resultados para um comando que definirá o acl para cada pasta encontrada.