如何从大量文件夹中删除单个用户 ACL?

2024-02-06

我有一个非常大的文件夹列表,我需要从每个文件夹中删除一个 ACL。我没有手动执行此操作,而是尝试编写一个脚本来在很短的时间内完成此操作,但我遇到了一些麻烦。

这是我到目前为止所拥有的:

$filepath = "C:\ALCTEST"
$user = "domain\username"

$folders = @((get-item $filePath))
$folders += Get-ChildItem $filePath -Recurse |
            where { $_.PSIsContainer -ne $false }

##Need to do this in order to remove item 0 from the array, otherwise
##item 0 is the parent folder
$newfolders = $folders[1,2 + 3..($folders.length - 1)]

foreach ($folder in $newfolders) {
    $acl = Get-Acl -Path $folder.FullName

    foreach ($access in $acl.access) {
        foreach ($value in $access.IdentityReference.Value) {
            if ($value -eq $user) {
                $acl.RemoveAccessRule($access) | Out-Null
            }
        }
    }

    Set-Acl -Path $folder -AclObject $acl
}

从我在调试过程中看到的情况来看,我think一切正常,直到我尝试将 ACL 设置回文件夹。当到达该行时,我收到错误

找不到路径“C:\Windows\system32\01”,因为它不存在。

ACLTEST 的父文件夹内有七个名为“01”...“07”的文件夹,其中包含用于测试的各种 ACL。

我不知道从这里该去哪里。我正在读书这篇脚本专家文章 http://blogs.technet.com/b/heyscriptingguy/archive/2009/09/17/hey-scripting-guy-september-17-2009.aspx这对我帮助很大,但他的脚本似乎专注于手动输入文件夹路径,对于需要更改的数百个文件夹,我绝对无法这样做。

任何帮助表示赞赏。我是 PowerShell 脚本编写的新手,因此,如果您发现除我在上面的脚本中提到的错误之外的任何错误,我很乐意听到它们。


The -Path的参数Set-Acl需要一个路径字符串,而不是DirectoryInfo目的。当通过后者时,仅其Name财产扩大了,所以Set-Acl正在当前工作目录中寻找具有给定名称的对象(在您的情况下显然是C:\Windows\system32).

Change

Set-Acl -Path $folder -AclObject $acl

into

Set-Acl -Path $folder.FullName -AclObject $acl

问题就会消失。

话虽如此,您可能还想进行一些其他修改。

$folders = @((get-item $filePath))
$folders += Get-ChildItem $filePath -Recurse |
            where { $_.PSIsContainer -ne $false }

##Need to do this in order to remove item 0 from the array, otherwise
##item 0 is the parent folder
$newfolders = $folders[1,2 + 3..($folders.length - 1)]

如果您不希望父文件夹位于数组中:首先不要将其放入数组中。由于您显然拥有 PowerShell v3,因此您可以使用-Directory参数而不是where filter.

$newfolders = Get-ChildItem $filePath -Recurse -Directory
foreach ($access in $acl.access) {
    foreach ($value in $access.IdentityReference.Value) {
        if ($value -eq $user) {
            $acl.RemoveAccessRule($access) | Out-Null
        }
    }
}

每个访问规则只有一个身份引用,因此内部循环是没有意义的。

foreach ($access in $acl.access) {
    if ($access.IdentityReference.Value -eq $user) {
        $acl.RemoveAccessRule($access) | Out-Null
    }
}

您的代码可以简化为如下所示:

$filepath = 'C:\ALCTEST'
$user     = 'domain\username'

$folders = Get-ChildItem $filePath -Recurse -Directory

foreach ($folder in $folders) {
    $acl = Get-Acl -Path $folder.FullName

    foreach ($access in $acl.Access) {
        if ($access.IdentityReference.Value -eq $user) {
            $acl.RemoveAccessRule($access) | Out-Null
        }
    }

    Set-Acl -Path $folder.FullName -AclObject $acl
}

或(使用管道)像这样:

$filepath = 'C:\ALCTEST'
$user     = 'domain\username'

Get-ChildItem $filePath -Recurse -Directory | ForEach-Object {
    $acl = Get-Acl -Path $_.FullName

    $acl.Access | Where-Object {
        $_.IdentityReference.Value -eq $user
    } | ForEach-Object {
        $acl.RemoveAccessRule($_) | Out-Null
    }

    Set-Acl -Path $_.FullName -AclObject $acl
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从大量文件夹中删除单个用户 ACL? 的相关文章

随机推荐

  • 是否可以获取Mysql中按列名分组在一起的行列表?

    在我的数据库中 我有一个名为 结果 的表 其中有四列 名称 设备 通过 失败 假设表中有 4 行 如下所示 name device passed failed test1 device 1 2 1 test1 device 2 3 0 te
  • 如何在 iPhone 的 pdf 页面中使用 CGPDFScanner 查找字坐标?

    我正在使用 CGPDFScanner 解析 pdf 页面 但我无法找到搜索结果的坐标 在 void Tm1 CGPDFScannerRef Scanner void info 中 我只获取某些单词的坐标 而不是 pdf 中每个单词的坐标 如
  • tensorflow有没有类似pytorch的“masked_fill_”的功能

    我想通过掩码矩阵将 INF 值设置为矩阵 就像 pytorch 代码一样 scores data masked fill y mask data float inf 我尝试使用tf map fn实现这一点 但性能太慢 那么tensorflo
  • undertow-handlers.conf 中的规则将 HTTP 重定向到 HTTPS

    我在负载均衡器后面有一个 Wildfly 它们之间的连接始终是 HTTP 客户端和负载均衡器之间的连接可以是 HTTP 或 HTTPS 负载均衡器设置一个标头 X Forwarded Proto 来让 Wildfly 知道客户端正在使用哪个
  • 为我的对象实现 Save 方法

    我正在尝试改进应用程序的设计 因此不是从表示层调用数据访问层 我将尝试从 BusinessObjects 层中的对象实现保存方法 但我不确定如何通过图层传递对象或其属性 例如 在我的旧设计中 我只是在表示层中创建对象的实例并分配它的属性 然
  • C中数组相关函数参数的区别

    我定义了一个数组 float array 3 4 5 那么 当 array array 0 array 0 0 array 0 0 0 用作函数参数 需要了解的重要一点是 在 C 中 数组并不是完整地作为参数传递的 相反 传递的是指向数组第
  • ui 路由器不会将内容放入指定的 ui-view 中

    当我进入路线时 projects 100 dates 2014 01 01 在 url 中并按回车键 我得到 项目 状态 我预计会触发 projects selected dates 状态 为什么路由不起作用 实际上它在我的机器上本地运行
  • iPhone 横向 - iOS7 R4 图像资源仅无启动图像

    我相当确定这是一个错误 但如果有人找到解决方法 请告诉我 我已经在 Xcode 5 中设置了启动图像的资产目录 如果我设置 iOS 7 R4 图像 则仅当我的应用程序支持纵向方向时才使用它 我的应用程序仅横向显示 我看不到启动图像 iOS
  • 如何在 php 中创建类似 twitter 的 search.json

    我在我的网站上创建了一个 search php 文件 它生成一个 JSON 字符串 帮助我为我的应用程序使用实时 ajax 但现在 我想将它作为 API 向其他人开放 但我发现 get getJSON ajax 不允许使用来自其他服务器 域
  • 使用 Django dumpdata 转储整体数据的子集?

    我正在尝试使用 dumpdata 为数据库生成 JSON 该数据库对于 django 来说足够大 需要很长一段时间才能输出 有没有办法只转储字段的子集 比如说 100 用于测试 我正在使用 MySQL 和 Django 1 0 第三方 dj
  • Plotly:如何在桑基图中设置节点位置?

    样本数据如下 unique list home0 page a0 page b0 page a1 page b1 page c1 page b2 page a2 page c2 page c3 sources 0 0 1 2 2 3 3 4
  • 如何使用冒泡排序对链表进行排序?

    我正在尝试使用冒泡排序来对链接列表进行排序 我使用 curr 和 Trail 来遍历列表 curr 应该总是比 Trail 领先一步 到目前为止 这是我的代码 void linked list sort int i j 0 int coun
  • 将 Docker 镜像内的用户切换为非 root 用户

    我正在尝试将用户切换到 tomcat7 用户以设置 SSH 证书 当我做su tomcat7 什么都没发生 whoami完成后仍然会rootsu tomcat7 Doing a more etc passwd 我得到以下结果 清楚地表明 t
  • 如何通过给出正在运行的进程名称来获取窗口句柄?

    如何通过在 c 中给出进程名称或窗口标题来获取窗口句柄 假设进程已经在运行 您可以使用Process class Process processes Process GetProcessesByName someName foreach P
  • 我应该在 for in 构造中使用 var 吗?

    我在一段 JavaScript 逻辑中使用了 for in 循环 我应该使用 var 关键字吗 当我按照 W3School 的示例运行 for in 循环时 如果没有 var 那么作为副作用 它被定义为全局范围 窗口 上的属性 functi
  • 登录后如何重定向 django.contrib.auth.views.login ?

    我添加了 django contrib auth views login我的网页上到处都是 为此我必须加载一个模板标签 https docs djangoproject com en 1 2 ref templates builtins 返
  • Rails:“in”之间的区别?和“包括?”在 Rails 中

    我正在研究 Rails 的 ActiveSupport 扩展 并且遇到了 in 方法 对我来说 它的外观和工作方式与 包含 完全相同 方法 只不过是反过来而已 1 5 include 1 1 in 1 5 我一直在使用 包含 自从我第一次开
  • 结合使用关系数据库和键值存储

    我正在工作的项目的要求似乎是同时使用关系数据库 例如 postgre MySQL 和键值存储 例如 HBase Cassandra 除了少量的相互依赖之外 我们的数据几乎可以很好地分解为两个数据模型之一 这并不是试图将关系数据库塞进键值存储
  • X,Y 坐标到 gcode

    我正在从事一个计算机科学项目 该项目是一个 CNC 绘图仪 基本上我看到的所有获取 Gcode 的方法都使用 Inkscape 我已经编写了软件将普通图像仅转换为黑白边缘 并且我已经从图像中提取了坐标 有什么方法可以使用 X Y 坐标生成
  • 如何从大量文件夹中删除单个用户 ACL?

    我有一个非常大的文件夹列表 我需要从每个文件夹中删除一个 ACL 我没有手动执行此操作 而是尝试编写一个脚本来在很短的时间内完成此操作 但我遇到了一些麻烦 这是我到目前为止所拥有的 filepath C ALCTEST user domai