powershell - 通过 Powershell 将 AD 组添加到大型公共驱动器
问题描述
我们有一个大型文件共享,其中包含大约 1tb 的数据。以下位置下大约有 600 个文件夹。F:\Data
任务是为数据文件夹内的每个文件夹分配特定的 AD 组读取权限,子文件夹无关紧要。
我想看看下面的脚本是否是最好的方法?我担心这是一个文件服务器,我不想破坏任何东西或弄乱任何权利,也不确定在脚本运行并且它们是文件打开时是否会导致错误。
我曾尝试在测试环境中运行此脚本,它运行良好,但没有错误日志,即使它在某个地方停止,我也可以检查。
我可能想多了,但只是想看看有没有人经历过这样的事情?
$StartingPath = "PATH"
$Right = "Read"
$Principal = "Domain\ADGroup"
$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule($Principal,$Right,"Allow")
foreach ($Folder in $(Get-ChildItem -Directory $StartingPath -Recurse)) {
$Acl=Get-Acl $Folder.FullName
$Acl.SetAccessRule($Rule)
Set-Acl $folder.Fullname $Acl
}
解决方案
您需要尝试继承和传播(使用您的测试环境)并使用带有 5 个参数的重载方法来为此创建新的访问规则。
这样,您只需将新规则添加到主数据共享文件夹,而不必迭代所有子文件夹。
# FileSystemRights: https://docs.microsoft.com/en-us/dotnet/api/system.security.accesscontrol.filesystemrights
# Inheritance flags: https://docs.microsoft.com/en-us/dotnet/api/system.security.accesscontrol.inheritanceflags
# Propagation flags: https://docs.microsoft.com/en-us/dotnet/api/system.security.accesscontrol.propagationflags
$Principal = "TheADGroupWithReadPermissions"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($Principal, "Read", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl = Get-Acl "F:\Data"
$acl.SetAccessRule($accessRule)
Set-Acl -Path "F:\Data" -ACLObject $acl
AddAccessRule()
和之间的区别SetAccessRule()
:
添加访问规则 | 设置访问规则 |
---|---|
此方法会将此访问规则添加到 ACL。如果用户或组具有修改权限,并且我们使用 AddAccessRule() 创建具有读取权限的新规则,则用户或组仍将具有修改权限。 | 此方法删除任何现有的访问权限并用指定的规则替换该访问权限。如果用户或组具有修改权限并且使用 SetAccessRule() 指定读取权限创建新规则,则该用户或组现在将只有读取权限。 |
推荐阅读
- node.js - 更新后发送消息时,Discord.js 机器人不会触发事件
- php - Woocommerce API REST 自两周以来无法正常工作
- python - 在 django 视图中合并其他 py 文件并在 html 中呈现
- python - 将 tkinter 中一个按钮的命令复制到另一个按钮上
- javascript - 如何从对象数组javascript制作滑块?
- ios - (React Native IOS)图像不加载外部链接
- javascript - 如何关闭来自循环的外部点击部分并在角度 10 中切换
- html - 以角度将数据从父组件传递到子组件
- loops - 在R中使用for循环函数打开多个csv文件,添加一列,并根据新列中的变量进行排序
- javascript - 离开页面时的 JavaScript 确认是否松散上传