У меня есть файл CSV, как показано ниже
Имя папки ----- ----- Группа безопасности
Папка1 ---------- SG_Folder1-Access
Папка2 ---------- SG_Folder2-Access
Мне нужно назначить разрешения, как показано ниже,
, чтобы группа безопасности «SG_Folder1-Access» имела доступ на изменение в «Папке 1»
Группа безопасности «SG_Folder2-Access» имела доступ на изменение в «Папке 2»
У меня 500 папок и их собственная группа безопасности, и мне нужно создать сценарий Power Shell для назначения разрешений.
Любая помощь будет принята с благодарностью.
Спасибо
Вы можете попробовать следующий сценарий:
$acl = Get-Acl "\\$servername\folderpath"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("domain\user or usergroup","Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-Acl "\\$servername\folderpath" $acl
Вот информационные ссылки для помощи. http://tomandersonpro.net/ntfs-permissions-with-powershell/
$CSV= Get-Content $CSVFileName
foreach ($line in $CSV) {
$folder= $line.split(";")[0]
$group= $line.split(";")[1]
$acl= Get-Acl $folder
$ar = New-Object system.security.accesscontrol.filesystemaccessrule($group,"Modify","Allow")
$acl.SetAccessRule($ar)
$Set-Acl $folder $acl
}
Я не тестировал, но это основная идея. Попробуйте улучшить его самостоятельно.
Также перейдите по этим ссылкам: Set-Acl Get-Acl MS Technet
Я написал методы поддержки, которые помогут вам легко достичь этого.
function Remove-Permission($StartingDir, $UserOrGroup = "", $All = $false) {
$acl = get-acl -Path $StartingDir
if ($UserOrGroup -ne "") {
foreach ($access in $acl.Access) {
if ($access.IdentityReference.Value -eq $UserOrGroup) {
$acl.RemoveAccessRule($access) | Out-Null
}
}
}
if ($All -eq $true) {
foreach ($access in $acl.Access) {
$acl.RemoveAccessRule($access) | Out-Null
}
}
Set-Acl -Path $folder.FullName -AclObject $acl
}
function Set-Inheritance($StartingDir, $DisableInheritance = $false, $KeepInheritedAcl = $false) {
$acl = get-acl -Path $StartingDir
$acl.SetAccessRuleProtection($DisableInheritance, $KeepInheritedAcl)
$acl | Set-Acl -Path $StartingDir
}
function Set-Permission($StartingDir, $UserOrGroup = "", $InheritedFolderPermissions = "ContainerInherit, ObjectInherit", $AccessControlType = "Allow", $PropagationFlags = "None", $AclRightsToAssign) {
### The possible values for Rights are:
# ListDirectory, ReadData, WriteData, CreateFiles, CreateDirectories, AppendData, Synchronize, FullControl
# ReadExtendedAttributes, WriteExtendedAttributes, Traverse, ExecuteFile, DeleteSubdirectoriesAndFiles, ReadAttributes
# WriteAttributes, Write, Delete, ReadPermissions, Read, ReadAndExecute, Modify, ChangePermissions, TakeOwnership
### Principal expected
# domain\username
### Inherited folder permissions:
# Object inherit - This folder and files. (no inheritance to subfolders)
# Container inherit - This folder and subfolders.
# Inherit only - The ACE does not apply to the current file/directory
#define a new access rule.
$acl = Get-Acl -Path $StartingDir
$perm = $UserOrGroup, $AclRightsToAssign, $InheritedFolderPermissions, $PropagationFlags, $AccessControlType
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $perm
$acl.SetAccessRule($rule)
set-acl -Path $StartingDir $acl
}
Теперь, если бы вы использовали его ... просто пропустите записи csv и передайте их функциям.
Полная история доступна на моем веб-сайте: https://evotec.xyz/manage-ntfs-permissions-powershell/