|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Создание папок с именами сотрудников, используя «Powershell» |
|
PowerShell - [решено] Создание папок с именами сотрудников, используя «Powershell»
|
Новый участник Сообщения: 13 |
Собственно говоря скрипт
Скрытый текст
# Создание папок обмена для сотрудников компании # Структура скрипта взята у В. Питина http://www.pitin.su/news-42-0-0.htm, добавлена раздача прав # Папки создаются по записям пользователей из заданного OU в Active Directory # папки именуются по полю name учетной записи # Права на корневую папку обмена следующие: # СОЗДАТЕЛЬ-ВЛАДЕЛЕЦ ![]() # NT AUTHORITY\система ![]() # Domain Admins ![]() # Domain Users ![]() # это дает возможность пользователям только просматривать список именных папок # Права на папку пользователя следующие: # СОЗДАТЕЛЬ-ВЛАДЕЛЕЦ ![]() # NT AUTHORITY\система ![]() # user.name ![]() # Domain Admins ![]() # Domain Users ![]() ![]() # SYNCHRONIZE # FILE_READ_DATA # FILE_WRITE_DATA # FILE_APPEND_DATA # это дает возможность всем пользователям создавать папки и файлы в папке любого сотрудника, # но открывать/изменять/удалять файлы каждый сотрудник может только в своей папке # Параметры скрипта необходимо настроить по месту # корневой ou может иметь вид "ou=CompanyName" или "ou=CompanyName,ou=root" в зависимости от структуры OU в AD # DN домена приписывается автоматически $RootDN = ([ADSI]"").distinguishedName $RootOU = 'ou=<корневой ou>' $RootFolder = 'C:\Обмен' $MaxUsers = 10000 # Блок, задающий константы для раздачи прав. # FileSystemAccessRule принимает строковые аргументы, но вынесение констант сюда делает код прозрачнее # флаги для задания наследования прав (CI, OI, IO) $inheritCO = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagationIO = [system.security.accesscontrol.PropagationFlags]"InheritOnly" $propagationN = [system.security.accesscontrol.PropagationFlags]"None" # права для всех пользователей на объекты внутри пользовательских папок $colUserRights = [system.security.accesscontrol.FileSystemRights]"ListDirectory, CreateFiles, CreateDirectories, AppendData" $colFullRights = [system.security.accesscontrol.FileSystemRights]"FullControl" $colListRights = [system.security.accesscontrol.FileSystemRights]"ListDirectory" # пользователи $creator = New-Object System.Security.Principal.NTAccount("CREATOR OWNER") $system = New-Object System.Security.Principal.NTAccount("NT AUTHORITY\SYSTEM") $admins = New-Object System.Security.Principal.NTAccount("Domain Admins") $users = New-Object System.Security.Principal.NTAccount("Domain Users") # собственно сам скрипт # Полностью очистить папку обмена Set-Location $RootFolder Get-ChildItem $RootFolder | Remove-Item -recurse # выбрать всех пользователей из заданного OU $dn="$RootOU,$RootDN" $objSearcher = New-Object System.DirectoryServices.DirectorySearcher ([ADSI]"LDAP://$dn") $objSearcher.Filter = "(&(objectCategory=user)(objectClass=person))" $objSearcher.SearchScope = [System.DirectoryServices.SearchScope]::Subtree $objSearcher.PageSize = $MaxUsers $colResult = $objSearcher.FindAll() foreach ($u in $colResult) { $user = [ADSI]($u.Path) if ($user.psbase.invokeget("AccountDisabled") -eq $False) { # для каждого пользователя, если он не залочен, создаем именную папку $user = $u.Properties $Folder = "$RootFolder\$($user.name)" New-Item -Path "$Folder" -ItemType Directory | Out-Null # перечень прав доступа к созданной папке $acl = Get-Acl $Folder # убираем наследование прав от родительской папки, при этом чистим все права доступа $acl.SetAccessRuleProtection($True, $False) # кто-то писал, что SetAccessRuleProtection может почистить не все # не сталкивался, но на всяк случ удаляем все права, которые были оставлены после сняяяятия наследования foreach ($ar in $acl.Access) { $acl.PurgeAccessRules($ar.IdentityReference) } # устанавливаем требуемые права $ar = New-Object System.Security.AccessControl.FileSystemAccessRule( $creator, $colFullRights, $inheritCO, $propagationIO, "Allow") $acl.SetAccessRule($ar) $ar = New-Object System.Security.AccessControl.FileSystemAccessRule( $system, $colFullRights, $inheritCO, $propagationN, "Allow") $acl.SetAccessRule($ar) $ar = New-Object System.Security.AccessControl.FileSystemAccessRule( $admins, $colFullRights, $inheritCO, $propagationN, "Allow") $acl.SetAccessRule($ar) $ar = New-Object System.Security.AccessControl.FileSystemAccessRule( $user.samaccountname, $colFullRights, $inheritCO, $propagationN, "Allow") $acl.SetAccessRule($ar) $ar = New-Object System.Security.AccessControl.FileSystemAccessRule( $users, $colUserRights, $inheritCO, $propagationN, "Allow") $acl.SetAccessRule($ar) $acl | Set-Acl $Folder } } Не понятности в $RootDN = ([ADSI]"").distinguishedName $RootOU = 'ou=<корневой ou>' Что необходимо поправить, чтобы он заработал если домен - company.loc, а OU c пользователями - OU=Users,OU=company,DC=company,DC=loc? |
|
Отправлено: 17:54, 28-02-2016 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата boffin2:
|
|
Отправлено: 21:13, 28-02-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:57, 29-02-2016 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - Создание динамического скрипта для PowerShell | AZABAZA | Скриптовые языки администрирования Windows | 1 | 18-11-2015 13:52 | |
CMD/BAT - Найти файл используя список с именами в txt файле | Spacejet | Скриптовые языки администрирования Windows | 0 | 29-07-2015 10:02 | |
CMD/BAT - Создание папок и файлов со с случайными именами. | Kirstem | Скриптовые языки администрирования Windows | 0 | 26-04-2015 20:06 | |
вирь, называет себя именами папок 1.44 мб. | Naiki | Лечение систем от вредоносных программ | 2 | 22-03-2010 10:43 | |
VBS/WSH/JS - Создание папок исходя из имени хоста.Создание ярлыков. | ufunf | Скриптовые языки администрирования Windows | 1 | 18-02-2010 13:59 |
|