Лучший отвечающий
Автоматизация по созданию папок на файлом обменнике

Вопрос
-
Добрый день. Не подскажите скрипт который бы делал следующее.
в фирме имеется домен, пользователи внесены в этот домен и каждый имеет свое уникальное имя для входа в свой пк, так же имеет файловое хранилище. Необходимо следующее:
При первом заходе пользователем в это файловое хранилище автоматом создавалось бы для него папка с его именем домена и к которой бы он имел бы доступ остальные пользователи нет.
И это должно быть автоматизированно.
Спасибо
- Изменено Arturnet 23 января 2018 г. 14:07
23 января 2018 г. 14:06
Ответы
-
Фамилию и имя не вытащить из переменных среды. А для автоматического создания папки можно использовать GPO preferences. Настройки по безопасности как писали выше
- Помечено в качестве ответа Vector BCOModerator 30 января 2018 г. 5:56
24 января 2018 г. 13:41 -
Держите:
Import-Module ActiveDirectory $users = Get-ADUser -Filter {Enabled -eq $true} -SearchBase "OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM" $path = "\\fileserver\usersPath\" Foreach ($user in $users) { if (Test-Path $($path + $user.Name) -eq $false) { New-Item -ItemType Directory -Path $path -Name $user.Name $domainUserName = (Get-ADDomain).Name + "\" + $user.SamAccountName $acl = Get-Acl $path $acl.SetAccessRuleProtection($True, $False) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") $acl.RemoveAccessRuleAll($rule) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") $acl.AddAccessRule($rule) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainUserName,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow") $acl.AddAccessRule($rule) $acct=New-Object System.Security.Principal.NTAccount($domainUserName,$user.Name) $acl.SetOwner($acct) Set-Acl $path $acl } }
Поскольку кусок кода с ACL'ами не мой - потестируйте в тестовой среде (у меня все было ок)
По моему предыдущий скрипт был удобнее, поскольку вы создали GPO и забыли, не будет таких моментов:
Пришел новый сотрудник, а у него нет личной папки на сервере, а скрипт запуститься, допустим, через два часа, как следствие - недовольный HR и Административный директор. Это я вам из своей практике говорю :D
PS Если кто знает простой способ создание ACL (без get-acl | set-acl) - поделитесь, пожалуйста.
- Изменено Sergey Ya 23 января 2018 г. 16:04
- Помечено в качестве ответа Vector BCOModerator 30 января 2018 г. 5:56
23 января 2018 г. 15:48
Все ответы
-
Добрый вечер!
$objPath = $objSearcher.FindOne() $objUser = $objPath.GetDirectoryEntry() $_fullName = (($objUser).displayName).split(" ") $fullName = $_fullName[1] + " " + $_fullName[0] #Функция создания ярлыка на рабочем столе Function link { $desktop = [Environment]::GetFolderPath('desktop') $lnk = "$desktop\$fullName.lnk" $WshShell = New-Object -ComObject WScript.Shell $Shortcut = $WshShell.CreateShortcut($lnk) $Shortcut.TargetPath = $path $Shortcut.Save() } $dir = "Z:\PERSONAL\" $path = $dir + $fullName if ((Test-Path $path) -eq $false) { New-Item -ItemType Directory -Path $dir -Name $fullName Get-Acl -Path $([Environment]::GetFolderPath('desktop')) | Set-Acl -Path $path }
link
1. При желании можете изменить переменную $fullName (смотрите ее вывод)
2. Если не нужен ярлык на рабочем столе - удалите функцию и ее вызов
3. ACL берется из папки desktop. Если вы не меняли его acl'ы , то все будет ровно так как вы описали
- Изменено Sergey Ya 23 января 2018 г. 14:47 орфография
23 января 2018 г. 14:28 -
спасибо, оно будет создавать папку для пользователя когда сам пользователь зайдет на диск файловый машины через свой комп ?23 января 2018 г. 14:34
-
спасибо, оно будет создавать папку для пользователя когда сам пользователь зайдет на диск файловый машины через свой комп ?
Нет, само по себе создаваться ничего не будет.
Я решил задачу следующим образом - Создал GPO, присвоил его OU и группам пользователей, добавил в GPO скрипт при логине.
Есть еще один вариант:
Переписать скрипт дабы тот брал из AD нужные нам учетки и проверял шару на наличие Личной папки пользователя.
Я от этого варианта отказался по причине того, что пользователя я могу завести в 10 утра, а скрипт отработает только ночью или наоборот.
- Изменено Sergey Ya 23 января 2018 г. 14:39
23 января 2018 г. 14:37 -
Переписать скрипт дабы тот брал из AD нужные нам учетки и проверял шару на наличие Личной папки пользователя.
23 января 2018 г. 14:47 -
Держите:
Import-Module ActiveDirectory $users = Get-ADUser -Filter {Enabled -eq $true} -SearchBase "OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM" $path = "\\fileserver\usersPath\" Foreach ($user in $users) { if (Test-Path $($path + $user.Name) -eq $false) { New-Item -ItemType Directory -Path $path -Name $user.Name $domainUserName = (Get-ADDomain).Name + "\" + $user.SamAccountName $acl = Get-Acl $path $acl.SetAccessRuleProtection($True, $False) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") $acl.RemoveAccessRuleAll($rule) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") $acl.AddAccessRule($rule) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainUserName,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow") $acl.AddAccessRule($rule) $acct=New-Object System.Security.Principal.NTAccount($domainUserName,$user.Name) $acl.SetOwner($acct) Set-Acl $path $acl } }
Поскольку кусок кода с ACL'ами не мой - потестируйте в тестовой среде (у меня все было ок)
По моему предыдущий скрипт был удобнее, поскольку вы создали GPO и забыли, не будет таких моментов:
Пришел новый сотрудник, а у него нет личной папки на сервере, а скрипт запуститься, допустим, через два часа, как следствие - недовольный HR и Административный директор. Это я вам из своей практике говорю :D
PS Если кто знает простой способ создание ACL (без get-acl | set-acl) - поделитесь, пожалуйста.
- Изменено Sergey Ya 23 января 2018 г. 16:04
- Помечено в качестве ответа Vector BCOModerator 30 января 2018 г. 5:56
23 января 2018 г. 15:48 -
в первом скринте упущена часть которая создает $objSearcher. если требуется получить логин пользователя - достаточно спросить его в переменных окружения $Env:Username
Теперь что касаемо задачи автора и ACL.
Для решения задачи вам следует подготовить вашу шару, а именно выставить на ней правильные NTFS права. Можно делать по примеру статей по Folder redirection коих на просторах сотни.
Если в кратце права должны стоять такого плана:
1 На корень шары выключаете наследование что бы ненужные полномочия не пошли вглубь
2 На корень шары выставляете Users (или Domain users на Ваш выбор) Create folders, read perm и пр. см. скрин или почитайте статьи про которые говорилось ранее
Важно область применения выставить 'This folder only'
3 Для систкмы и админов оставляете полные права с наследованием
4 для псевдо группы "Creators Owners" настраиваете права с областью действия "Subfolders and files only" c полными правами. См. скрин или статьи про которые говорилось ранее
The opinion expressed by me is not an official position of Microsoft
23 января 2018 г. 22:07Модератор -
$Env:Username переменная мне не подошла ибо нужно было создавать папки такого вида: Фамилия Имя24 января 2018 г. 8:22
-
$Env:Username переменная мне не подошла ибо нужно было создавать папки такого вида: Фамилия Имя
фамилия Имя могут повторятся, а username уникален, но это дело вкуса и принятия рисковThe opinion expressed by me is not an official position of Microsoft
24 января 2018 г. 13:10Модератор -
Фамилию и имя не вытащить из переменных среды. А для автоматического создания папки можно использовать GPO preferences. Настройки по безопасности как писали выше
- Помечено в качестве ответа Vector BCOModerator 30 января 2018 г. 5:56
24 января 2018 г. 13:41