Главная > Powershell > Копирование прав доступа к каталогам

Копирование прав доступа к каталогам

Недавно на работе потребовалось разграничить права доступа на определённые общедоступные каталоги (ну т.е. чтобы одни пользователи могли туда кидать файлы, вторые могли эти файлы только читать, а третьим вообще запретить туда соваться). На всех этих каталогах права должны быть одинаковыми.

Сразу вспомнилось, что когда я только начинал изучать Powershell мне попалась статья, в которой речь шла о том, что используя Powershell можно копировать эти самые права, тем самым облегчая эту рутинную работу. Ту статью не нашёл, поэтому решил написать свою 🙂

На всякий случай уточню: речь идёт о правах, которые назначаются на вкладке Безопасность свойств каталога:

 Directory Properties

Свойства каталога: Безопасность

Для работы с ACL (Access Control List – список контроля доступа) в Powershell есть два замечательных командлета: Get-Acl и Set-Acl. Как понятно из названия, первый получает ACL, а второй позволяет изменять.

Используя эти командлеты можно копировать права одного каталога на другой. В простейшем случае можно обойтись одной строкой. Пример из встроенной справки Powershell:

Get-Acl C:\dog.txt | Set-Acl -Path C:\cat.txt

Здесь берутся права из файла dog.txt и применяются к файлу cat.txt.

Так как у меня несколько каталогов, к которым нужно применить права, логично было бы перебирать их в цикле, а так как нужные каталоги имеют совершенно разные пути, то ничего другого не придумал, кроме как организовать массив путей к каталогам, приблизительно вот так:

# Каталоги к которым нужно применить права доступа
$Path1 = "C:\Directory"
$Path2 = "C:\Windows\Temp"
$Path3 = "D:\test"
$Path4 = "D:\temp"

$Paths = $Path1, $Path2, $Path3, $Path4

Теперь всё, что нужно сделать, так это выбрать один каталог, в качестве эталона, назначить ему нужные права и скопировать их на все остальные каталоги:

# ACL каталога, права которого нужно применить к другим каталогам
$ACL = Get-Acl 'D:\Source'

# Копируем права доступа
$Paths | ForEach-Object `
{
    Set-Acl -AclObject $ACL -Path $_ -Passthru
}

В этом куске кода права доступа каталога D:\Source сохраняются в переменной, после чего в цикле назначаются всем остальным каталогам.

Реклама
Рубрики:Powershell Метки:
  1. Комментариев нет.
  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: