设置文件夹、子文件夹和文件权限设置-ACL Powershell 脚本。设置文件继承不起作用
Set Folder, Subfolder and File Permission Set-ACL Powershell Script. Setting File Inherititance does not work
我的 Powershell 脚本需要一些帮助。
我的客户有一个巨大的目录,我需要更改安全设置。
我在下面编写了这段代码并且它有效但我遇到了一个问题:
文件上的继承不起作用,因此未设置目录中任何文件的安全权限。
也许有人会发现我的错误。
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<Pfade>
<pfad name="E:\Share\TEST">
<gruppe name="Domain Admins">
<rechte>FullControl</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe1">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe2">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe3">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe4">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe5">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="SYSTEM">
<rechte>FullControl</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
</pfad>
</Pfade>
PowerShell:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
cd $dir
# Einlesen des XML-Dokuments im aktuellen Skriptpfad (!)
$doc = [XML](Get-Content -Path struktur.xml)
#### Start TAKEOWN
$Remotesystem = "\server1"
$Adminuser = "domain\admin"
$yes = "Y"
$log = "c:\Users\admin\Desktop\log.txt"
psexec $Remotesystem
TAKEOWN /S $Remotesystem /F $doc.Pfade.pfad.name /D $yes /R >> $log
#### End TAKEOWN
$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
$propagation = [system.security.accesscontrol.PropagationFlags]"None"
$doc.Pfade.pfad | ForEach-Object {
$FolderName = $_.name
$_.gruppe | ForEach-Object {
$pathrecht = $_.rechte
$pathaktion = $_.aktion
$pathrechts = $_.rechtsetzen
$pathgruppe = $_.name
$acl = Get-Acl $FolderName
$acl.SetAccessRuleProtection($True, $False)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($pathgruppe, $pathrecht, $inherit, $propagation, $pathaktion)
switch ($pathrechts) {
Add {$acl.AddAccessRule($rule)}
Delete {$acl.RemoveAccessRuleAll($rule)}
}
Set-Acl $FolderName $acl
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">>log.txt
$date = Get-Date -format dd.MM.yyyy-HH:mm:ss
$date>>log.txt
Get-Acl $FolderName | select Path, Owner, Group, AccessToString | Format-List >>log.txt
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">>log.txt
}
}
echo "########################################################################################">>log.txt
echo "########################################################################################">>log.txt
echo "########################################################################################">>log.txt
cd $dir
文件夹和子文件夹的权限正是我想要的subfolderpermisson
但是文件 filepermission 的权限没有设置,为什么?
终于明白了。
Protectet 所在的文件是我的错:
$acl.SetAccessRuleProtection($True, $False)
我需要将 SetAccessRuleProtection 更改为:
$acl.SetAccessRuleProtection($False, $True)
感谢 thudbutt Explain for beginners the ACL object property "SetAccessRuleProtection" in PowerShell with examples
我的 Powershell 脚本需要一些帮助。 我的客户有一个巨大的目录,我需要更改安全设置。
我在下面编写了这段代码并且它有效但我遇到了一个问题: 文件上的继承不起作用,因此未设置目录中任何文件的安全权限。
也许有人会发现我的错误。
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<Pfade>
<pfad name="E:\Share\TEST">
<gruppe name="Domain Admins">
<rechte>FullControl</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe1">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe2">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe3">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe4">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="gruppe5">
<rechte>Modify</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
<gruppe name="SYSTEM">
<rechte>FullControl</rechte>
<aktion>allow</aktion>
<rechtsetzen>Add</rechtsetzen>
</gruppe>
</pfad>
</Pfade>
PowerShell:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
cd $dir
# Einlesen des XML-Dokuments im aktuellen Skriptpfad (!)
$doc = [XML](Get-Content -Path struktur.xml)
#### Start TAKEOWN
$Remotesystem = "\server1"
$Adminuser = "domain\admin"
$yes = "Y"
$log = "c:\Users\admin\Desktop\log.txt"
psexec $Remotesystem
TAKEOWN /S $Remotesystem /F $doc.Pfade.pfad.name /D $yes /R >> $log
#### End TAKEOWN
$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
$propagation = [system.security.accesscontrol.PropagationFlags]"None"
$doc.Pfade.pfad | ForEach-Object {
$FolderName = $_.name
$_.gruppe | ForEach-Object {
$pathrecht = $_.rechte
$pathaktion = $_.aktion
$pathrechts = $_.rechtsetzen
$pathgruppe = $_.name
$acl = Get-Acl $FolderName
$acl.SetAccessRuleProtection($True, $False)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($pathgruppe, $pathrecht, $inherit, $propagation, $pathaktion)
switch ($pathrechts) {
Add {$acl.AddAccessRule($rule)}
Delete {$acl.RemoveAccessRuleAll($rule)}
}
Set-Acl $FolderName $acl
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">>log.txt
$date = Get-Date -format dd.MM.yyyy-HH:mm:ss
$date>>log.txt
Get-Acl $FolderName | select Path, Owner, Group, AccessToString | Format-List >>log.txt
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">>log.txt
}
}
echo "########################################################################################">>log.txt
echo "########################################################################################">>log.txt
echo "########################################################################################">>log.txt
cd $dir
文件夹和子文件夹的权限正是我想要的subfolderpermisson 但是文件 filepermission 的权限没有设置,为什么?
终于明白了。 Protectet 所在的文件是我的错:
$acl.SetAccessRuleProtection($True, $False)
我需要将 SetAccessRuleProtection 更改为:
$acl.SetAccessRuleProtection($False, $True)
感谢 thudbutt Explain for beginners the ACL object property "SetAccessRuleProtection" in PowerShell with examples