1

У меня есть несколько сотен папок, каждая из которых содержит подпапку "Документы с предложениями".

Мне нужно изменить разрешения ACL для каждого экземпляра этих папок "Документы с предложениями".

Есть ли способ автоматизировать этот процесс? Мне сказали, что vbscript не является хорошим выбором для работы с разрешениями ACL. Я представляю себе сценарий powershell или что-то подобное, что автоматически выполнит поиск по всей иерархии папок и добавит указанное разрешение ACL для каждой папки с именем "предложение", но я не знаю, возможно ли это на самом деле или есть какие-то другие способ выполнить эту задачу.

Мысли кто-нибудь?

Редактировать: окно комментария продолжает путать мою фактическую команду powershell, которая должна быть следующей:

Get-ChildItem "e:\datastore\marcstone bids\*\*\*\Bid Documents" | where {$_.Attributes -eq 'Directory'}

Проблема в том, что иногда папка «Предложения» не всегда содержит три слоя под ставками Marcstone, а иногда только два слоя, поэтому при попытке выполнить следующее:

Get-ChildItem "e:\datastore\marcstone bids\*\*\Bid Documents" | where {$_.Attributes -eq 'Directory'}

Обратите внимание, что во второй версии только две * Эта версия не может найти какие-либо папки, хотя их много. Зачем?

Редактировать снова: это становится все интереснее. Изучив результаты, возвращенные успешной командой, я обнаружил, что она возвращает только пустые папки "Документы с предложениями". Любые папки "Документы с предложениями", содержащие какие-либо файлы, не возвращаются. Зачем??

Снова отредактируйте: я изменил команду на следующую, и она вернула ВСЕ папки с "заявками".

Get-ChildItem "e:\datastore\marcstone bids\*\*\*\Bid Documents" | where {$_.Attributes -match 'Directory'}

Теперь, чтобы узнать, как использовать icacls для изменения разрешений.

Изменить еще раз: ОК, я думаю, что у меня есть правильный синтаксис для icacls с этим:

icacls *filename* /deny special-restrict1:(f)

Итак, ПОЖАЛУЙСТА, кто-нибудь, помогите мне соединить эти две команды вместе.

Экспериментируя с такой переменной:

$var = Get-ChildItem "e:\datastore\marcstone bids\1001-3500\1701-1750\1702 Morrow M
emorial Home - Sparta WI\Bid Documents" | where {$_.Attributes -match 'Directory'} | icacls $var /deny special-restrict1
:/F

Я выбрал определенную папку для экспериментов. Команда возвращает следующую ошибку:

First parameter must be a file name pattern or "/?"

Мысли кто-нибудь?

3 ответа3

0

не уверен, если это поможет, но здесь идет:

Вы пытались просто сохранить путь к нужной папке в переменной ($ path E:\datastore\marcstone bids ***\Bid Documents)

У меня не настроена правильная среда, но только мысль

0

Попробуйте что-то вроде этого:

Get-ChildItem "e:\datastore\marcstone bids\*" -include "Bid Documents" -directory -recurse

Параметр -recurse должен найти все подкаталоги, независимо от того, насколько глубоко они вложены. Параметр -directory должен ограничивать поиск только папками (каталогами). Возможно, у меня немного неправильный синтаксис, но он должен указать вам правильное направление.

Оттуда вы сможете передавать результаты в команду, которая будет устанавливать acl для каждой найденной папки.

0

icacls является ответом здесь:https://technet.microsoft.com/en-us/library/cc753525.aspx

Это позволит вам изменить acls нескольких папок

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .