Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 重置文件/文件夹权限&;设置新权限_Powershell_File Permissions - Fatal编程技术网

Powershell 重置文件/文件夹权限&;设置新权限

Powershell 重置文件/文件夹权限&;设置新权限,powershell,file-permissions,Powershell,File Permissions,正在尝试使用powershell重置从Linux计算机复制的文件/文件夹的权限 结构与此类似 E:\Parent Folder - No inheritance - Group based permissions | | Folder01 - No inheritance | | Subfolders and file - Group based permissions, inheritance F

正在尝试使用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尝试重置所有权限。由于继承标志也会被重置,因此这一点最初运行良好

然后,我使用链接中描述的方法在我的文件夹上设置适当的权限和继承,并让继承完成其余工作-

脚本在我的测试目录结构上工作。但是在处理完文件夹和文件后,当icacls命令运行时,我收到一条“权限被拒绝”消息(takeown命令运行时没有问题)。然后脚本的其余部分将失败

我知道我可以使用RemoveAccessRule($objACE)从对象中删除权限,但我还没有弄清楚如何对所有已定义的用户权限执行此操作

我想从头开始文件夹和文件,然后应用权限。我找到的所有示例仅显示如何删除特定用户的权限


最初的权限清理哪里出了问题?

我最终得到了一个混乱的解决方案

在从Linux服务器获得数据的同步副本后,我使用robocopy将所有数据从一个文件夹“移动”到另一个文件夹。这将完全重置所有文件的所有权限

在完成这项工作之后,我学到了更多关于设置权限的知识,并意识到我一直在犯错误

我漫无目的地使用这个对象来删除权限

$acl.RemoveAccessRule($ace)|输出空值

这实际上是在我有机会设置任何其他权限之前删除文件上的所有权限。因此,我删除了调整权限的功能

一旦我意识到这一点,我就使用属性IdentityReferenceisInhered的组合来选择性地针对我要删除的权限


脚本又大又难看,但似乎很有效。

也许你不应该直接破坏这些权限?您更改复制作业,使其将文件复制到现有目录结构中(
Folder01
和其他处于同一级别的文件不应被覆盖),然后设置权限一次,就这样做了。我可以这样做。首先,我需要改变复制的方法。目前,我正在使用rsync从服务器上提取数据。但是,我仍然担心会有一些延迟权限,这就是我希望从头开始的原因。如果在复制文件时不复制ACL,则目标文件或文件夹将继承其父文件夹的ACL。所以,您设置了初始的基于组的权限,然后在没有ACL的情况下复制文件,您就完成了/有趣的想法。让我试一试。我可以设置初始文件夹结构,然后执行复制过程。谢谢你的建议。尽管我希望我仍然能找出我的脚本哪里出了问题。