none
Автоматизация по созданию папок на файлом обменнике RRS feed

  • Вопрос

  • Добрый день. Не подскажите скрипт который бы делал следующее.

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

    При первом заходе пользователем в это файловое хранилище автоматом создавалось бы для него папка с его именем домена и к которой бы он имел бы доступ остальные пользователи нет.

    И это должно быть автоматизированно.

    Спасибо


    • Изменено 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