【发布时间】:2015-10-18 06:53:36
【问题描述】:
尝试使用 powershell 重置从 Linux 机器复制过来的文件/文件夹的权限。
结构与此类似
E:\Parent Folder - No inheritance - Group based permissions
|
|
Folder01 - No inheritance
|
|
Subfolders and file - Group based permissions, inheritance
Folder02 - No inheritance
|
|
Subfolders and file - Group based permissions, inheritance
Folder03 - No inheritance
|
|
Subfolders and file - Group based permissions, inheritance
Folder04 - No inheritance
|
|
User Folder - User based permissions, No Inheritance
|
|
Inheritance
脚本当前首先运行 takeown 命令,然后是 icacls。 然后我遍历第一级文件夹以禁用继承。 然后将权限应用于文件夹。
这是我所拥有的样本。它只是针对我要设置的每个特定权限重复。
Get-ChildItem -Path "$solidPath" -ErrorAction SilentlyContinue | ForEach-Object {
$Item = $_.FullName
If ( "$Item" -eq "E:\ParentFolder\Folder04" -or "$Item" -eq "E:\ParentFolder\Folder03" )
{
Write-Host "Do Not Touch" -ForegroundColor DarkRed
}
Else
{
$colRightsAdmin = [System.Security.AccessControl.FileSystemRights]"FullControl"
$InheritanceFlagAdmin = [System.Security.AccessControl.InheritanceFlags]::ContainerInHerit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInHerit
$PropagationFlagAdmin = [System.Security.AccessControl.PropagationFlags]::None
$objTypeAdmin = [System.Security.AccessControl.AccessControlType]::Allow
$objUserAdmin = New-Object System.Security.Principal.NTAccount("BUILTIN\Administrators")
$objACEAdmin = New-Object System.Security.AccessControl.FileSystemAccessRule($objUserAdmin, $colRightsAdmin, $objTypeAdmin)
$objACLAdmin = Get-ACL "$Item"
$objACLAdmin.AddAccessRule($objACEAdmin)
Set-ACL "$Item" $objACLAdmin
我正在使用 takeown + icacls 来尝试重置所有权限。这最初运作良好,因为继承标志也被重置。
然后我使用链接中描述的方法在我的文件夹上设置适当的权限和继承,并让继承完成其余的工作 - Powershell & .net
该脚本适用于我的测试目录结构。但是在处理完文件夹和文件之后,当 icacls 命令运行时,我收到一条权限被拒绝消息(takeown 命令运行没有问题)。然后脚本的其余部分将失败。
我知道我可以使用 RemoveAccessRule($objACE) 从对象中删除权限,但我无法弄清楚如何为定义的所有用户权限执行此操作。
我想从头开始文件夹和文件,然后应用权限。我发现的所有示例仅显示如何删除特定用户的权限。
初始权限清理哪里出了问题?
【问题讨论】:
-
或许您不应该直接破坏这些权限?您更改复制作业,使其将文件复制到现有目录结构(
Folder01和同一级别的其他人不应被覆盖),然后您设置一次权限并让它成为。 -
我可以做到这一点。我首先需要更改用于复制的方法。目前我正在使用 rsync 从服务器中提取数据。但是,我仍然担心会有一些挥之不去的权限,这就是我希望完全从头开始的原因。
-
如果复制文件时不复制ACL,则目标文件或文件夹将继承其父文件夹的ACL。所以,你设置了初始的基于组的权限,然后复制没有 ACL 的文件,你就完成了/
-
有趣的想法。让我试一试。我可以设置初始文件夹结构,然后执行复制过程。感谢您的建议。虽然我希望我仍然可以找出我的脚本出错的地方。
标签: powershell file-permissions