Изменить разрешения для домашнего каталога нового пользователя с помощью powershell

Мне нужна помощь со сценарием. То, что я пытаюсь выполнить, - это когда в ADUC создаются новые пользователи и создается их путь к профилю (домашняя папка), это дает пользователям «Полный доступ». Я хочу изменить это на "Изменить разрешения". Моя проблема в том, что еженедельно создается несколько пользователей, и мне нужен сценарий, который может просматривать все домашние папки и, если он найдет пользователя с полным контролем, изменить его для изменения. Но также есть группа безопасности администратора, в которой есть несколько администраторов, у которых есть «Полный доступ к каждому домашнему каталогу. Я не хочу, чтобы он заглядывал внутрь группы и забирал у них полный контроль. Какие командлеты мне нужно сказать игнорировать эту группу и изменить только пользователя, у которого есть «Полный доступ» для изменения разрешений. У меня есть сценарий, который изменяет конкретного пользователя с «Полный доступ» для изменения, но я не знаю, как правильно сделать так, чтобы он просто выполнял поиск учетная запись пользователя в папках с «Полный доступ».

#ChangeACL.ps1
$Right="Modify"

#The possible values for Rights are 
# ListDirectory
# ReadData 
# WriteData 
# CreateFiles 
# CreateDirectories 
# AppendData 
# ReadExtendedAttributes 
# WriteExtendedAttributes 
# Traverse 
# ExecuteFile 
# DeleteSubdirectoriesAndFiles 
# ReadAttributes 
# WriteAttributes 
# Write 
# Delete 
# ReadPermissions 
# Read 
# ReadAndExecute 
# Modify 
# ChangePermissions 
# TakeOwnership 
# Synchronize 
# FullControl

$StartingDir="\\server\Path" #What directory do you want to start at?"
$Principal="domain\user" #What security principal do you want to grant" `


#define a new access rule.

$rule=new-object System.Security.AccessControl.FileSystemAccessRule($Principal,$Right,"ContainerInherit,ObjectInherit", 'None',"Allow")

foreach ($file in $(Get-ChildItem $StartingDir -recurse)) {
  $acl=(Get-Item $file.FullName).GetAccessControl('Access')

  #Add this access rule to the ACL
  $acl.SetAccessRule($rule)

  #Write the changes to the object
  #Set-Acl $File.Fullname $acl
  (Get-Item $file.FullName).SetAccessControl($acl)
  }
1
задан 24 May 2019 в 17:35
2 ответа

После некоторого тестирования я придумал этот скрипт, и, похоже, он работает:

$HomeFolders = Get-ChildItem \\server\Path -Directory
foreach ($HomeFolder in $HomeFolders) {
    $Path = $HomeFolder.FullName
    $Acl = (Get-Item $Path).GetAccessControl('Access')
    $Username = $HomeFolder.Name
    $Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("domain\$Username", 'Modify','ContainerInherit,ObjectInherit', 'None', 'Allow')
    $Acl.SetAccessRule($Ar)
       (Get-Item $HomeFolder.FullName).SetAccessControl($acl)
}
1
ответ дан 3 December 2019 в 20:07

Başqa birini yaratdım eyni vəziyyətə sahib ola bilən hər kəs. Bu ACL-ləri yoxlayacaq və ehtiyac olduqda dəyişəcək.

#set root share to scan 
$HomeFolders = get-childitem \\servername\USERS -Directory

# loop through all folders in root
foreach ($HomeFolder in $HomeFolders) {
    $Path = $HomeFolder.FullName

    #set username based on folder name. Know that this is not going to be 100% accurate 
    # since some user shares may have access granted to other users(ie, managers)
    $Username = $HomeFolder.Name

    # set variable for Username
    $IdentityReferrence = "domain\$Username"

    # create security object specific to user
    $Ar = New-Object System.Security.AccessControl.FileSystemAccessRule($IdentityReferrence, 'Modify', 'ContainerInherit,ObjectInherit', 'None', 'Allow')

    # get acl of folder in loop
    $Acl = (Get-Item $Path).GetAccessControl('Access')

    # look through all access objects
    foreach ($aclitem in $acl.Access) {
        # if a matching userID is found, check the permissions against the new access rule identity reference.
        if ($aclitem.IdentityReference -eq $ar.IdentityReference) {
            # if rights do not match, set the permissions with access rule set before
            if ($aclitem.FileSystemRights -ne $ar.FileSystemRights) { 
                write-host $HomeFolder.FullName "has permission of "$aclitem.FileSystemRights
                $Acl.SetAccessRule($Ar)
                write-host "Correcting permissions on $($homefolder.fullname)"
                (Get-Item $HomeFolder.FullName).SetAccessControl($acl)
            }
        }
    } 
}
1
ответ дан 3 December 2019 в 20:07

Теги

Похожие вопросы