Powershell: применение владельца к нескольким файлам и папкам для каждого имени пользователя

У нас есть сервер, на котором находится папка «Мои документы» для всех наших пользователей. Некоторые владельцы папок изменились на администраторов. Я пытаюсь разработать сценарий PowerShell, который переходит в корневую папку моих документов каждого пользователя и применяет пользователя в качестве владельца для всех подпапок и файлов, содержащихся в нем. Это возможно?

У меня есть следующее из предыдущего скрипта, который пытался установить пользователя как полные разрешения для каждой корневой папки моего документа:

$FolderPath = "E:\mydocuredir\"
$MyDocsMain = Get-ChildItem -Path $FolderPath -Directory

Get-ChildItem -Path $FolderPath -Directory | ForEach-Object{

    $HomeFolders = Get-ChildItem $FolderPath $_.Name -Directory

    $Path = $HomeFolders.FullName
    $Acl = (Get-Item $Path).GetAccessControl('Access')
    $Username = $_.Name

    $Ar = New-Object System.Security.AccessControl.FileSystemAccessRule($Username, 'FullControl', 'ObjectInherit', 'InheritOnly', 'Allow')
    $Acl.SetAccessRule($Ar)
    Set-Acl -path $Path -AclObject $Acl
}

person Rick    schedule 03.04.2018    source источник
comment
В какой структуре находится папка с моими документами, что-то вроде E:\mydocuredir\username\?folder?   -  person James C.    schedule 03.04.2018
comment
Да. Папка имени пользователя после mydocuredir, значит это просто их файлы и папки.   -  person Rick    schedule 03.04.2018


Ответы (1)


Во-первых, убедитесь, что разрешения общего ресурса и корневой папки для перенаправленных папок следуйте рекомендациям.


Я бы использовал модуль PS NTFSSecurity (блог о его использовании) . В этом модуле есть команды, которые намного легче понять, поскольку они следуют тому, как вы устанавливаете разрешения через графический интерфейс.

$FolderPath = "E:\mydocuredir"

Get-ChildItem -Path $FolderPath -Directory | ForEach-Object{
    Add-NTFSAccess -Path $_.FullName -Account "domain\$($_.Name)" -AccessRights FullControl -AppliesTo ThisFolderSubfoldersAndFiles
}

Чтобы установить владельца, замените команду Add-NTFSAccess на:

Set-NTFSOwner -Path $_.FullName -Account "domain\$($_.Name)"
person James C.    schedule 03.04.2018
comment
Я понимаю, что этот код предназначен для назначения полных разрешений, что кажется лучше, чем мой первоначальный, но я хочу назначить владельца пользователя. - person Rick; 04.04.2018
comment
Обновленный ответ :) - person James C.; 04.04.2018
comment
Будет ли эта инструкция рекурсивно применяться ко всем файлам и подпапкам и их файлам? - person Rick; 05.04.2018
comment
Пробовал по инструкции, но сменилось только владельца в родительской папке. - person Rick; 06.04.2018
comment
Взгляните на команду Enable-NTFSInheritance для этого. - person James C.; 08.04.2018
comment
Я пытался протестировать его, но командлет не распознается, хотя я поместил все содержимое NTFSSecurity в свой c:\users\Documents\WindowsPowerShell\Modules\NTFSSecurity и с помощью команды Install-Module -Name NTFSSecurity. - person Rick; 09.04.2018
comment
В итоге использовал эту другую команду, которая, кажется, работает до сих пор dir2 $Folder -Recurse | Set-NTFSOwner -Account 'mysuernameindomain' - person Rick; 09.04.2018