Простенький скрипт, точнее две его разновидности, для случая, когда необходимо создать папки для ряда пользователей на файловом сервере при условии, что названия папок будут совпадать с именами пользователей и эти пользователи будут иметь определенный уровень доступа к этим (своим) папкам. Все это может создаваться внутри определенной папки непосредственно на сервере или через сеть в общей папке по UNC пути.
Первый пример использует дополнительный модуль ActiveDirectory и предназначен для случая, когда пользователи находятся в каком-либо OU в AD:
#
# PowerShell Script.
# Creates home folders for users from an OU in AD and set permissions.
# Prepared by Alexander Lipovetskiy. August 2013.
#
cls
# We need the AD module for this first
Import-Module ActiveDirectory
# A folder or share where home folders must be created.
$Dir = "D:Users"
# or $Dir = "\servershare"
# Path to an OU with users.
$Users = Get-ADUser -Filter * -SearchBase "OU=Users,OU=Muhosransk,DC=domain,DC=com"
# Creating folders and set permissions.
foreach ($User in $Users) {
$User = $User.Name
$Path = New-Item -ItemType Directory -Path $Dir -Name $User
$Args = New-Object system.security.accesscontrol.filesystemaccessrule($User,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
$ACL = Get-Acl $Path
$ACL.SetAccessRule($Args)
Set-Acl $Path $ACL
}
Второй пример обрабатывает список пользователей, находящийся в текстовом файле:
#
# PowerShell Script.
# Creates home folders for a list of users and set permissions.
# Prepared by Alexander Lipovetskiy. August 2013.
#
cls
# A folder or share where home folders must be created.
$Dir = "D:Users"
# or $Dir = "\servershare"
# Path to a text file with users.
$Users = Get-Content "$homeusers.txt"
# Creating folders and set permissions.
foreach ($User in $Users) {
$Path = New-Item -ItemType Directory -Path $Dir -Name $User
$Args = New-Object system.security.accesscontrol.filesystemaccessrule($User,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
$ACL = Get-Acl $Path
$ACL.SetAccessRule($Args)
Set-Acl $Path $ACL
}
В данных примерах устанавливаются не полные права, а «Modify, Synchronize» не дающие возможности пользователям менять security permissions и становиться владельцами папок. Конечно все это можно поменять на FullControl или что-либо другое. Также в примерах установлено наследование разрешений подпапками и файлами.
Автор: alex_at