Powershell 在导入 csv 时出现 Set-ACL 问题

2024-05-21

我使用一个脚本将 ACL 从一个系统导入到 csv 中,并使用另一个脚本读取 csv、创建文件夹结构并将权限应用到新系统。由于安全限制,系统不可能相互连接,因此不能选择 robocopy。

正在创建新的文件夹结构,但 ACL 未应用,并且出现错误。

以下是测试 csv 的示例:

FolderName,FolderPath,IdentityReference,FileSystemRights,InheritanceFlag
user1,DEEPP\Working\user1,AD\user1,Modify,"ContainerInherit, ObjectInherit"
user2,DEEPP\Working\user2,AD\user2,Modify,"ContainerInherit, ObjectInherit"

以下是读取 csv 并设置 ACL 的测试脚本。单步执行,直到底部的 Set-ACL 行为止,我没有收到任何错误。

#Create folders and apply AD permissions
#Note: Remove drive letter in FolderPath column of csv file (ex, F:\); remove non-AD user rows

# Location Where your folders are to be created
$RootDir = "C:\Users\TR\Documents\Scripts\ACL"
Set-Location "$RootDir" 

# Import CSV file from location
$Folders = Import-Csv "$RootDir\ACLs_Proj-2023-01-25.csv"
$FolderPath = $Folder.FolderPath

# Create Folders from FolderPath column in csv; set ACL
ForEach ($Folder in $Folders) 
{ 

$a = Test-Path $RootDir\$FolderPath #{continue} #{Write-Verbose "Folder: $Path Already Exists"}
if ($a -eq $false) {
 
New-Item $FolderPath -type directory
}
        $IdentityReference = $Folder.IdentityReference
        $FileSystemRights = $Folder.FileSystemRights
        $InheritanceFlag = "ContainerInherit"
        $PropagationFlag = "None"
        $AccessControlType = "Allow"

#New-Object System.Security.AccessControl.FileSystemAccessRule('IdentityReference','FileSystemRights','InheritanceFlags','PropagationFlags','AccessControlType')
$New_ACL = New-Object Security.AccessControl.FileSystemAccessRule $IdentityReference, $FileSystemRights, $InheritanceFlag, $PropagationFlag, $AccessControlType
Set-Acl -Path "$RootDir\$FolderPath" -AclObject $New_ACL -WhatIf
}

来自 Set-ACL 行的错误:

Set-Acl : AclObject
At line:1 char:1
+ Set-Acl -Path "$RootDir\$FolderPath" -AclObject $New_ACL -WhatIf
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (System.Security...ystemAccessRule:FileSystemAccessRule) [Set-Acl], ArgumentException
    + FullyQualifiedErrorId : SetAcl_AclObject,Microsoft.PowerShell.Commands.SetAclCommand

如果我单独输入 $New_ACL,我得到的大部分是单个条目的预期输出:

FileSystemRights  : Modify, Synchronize
AccessControlType : Allow
IdentityReference : AD\user2
IsInherited       : False
InheritanceFlags  : ContainerInherit
PropagationFlags  : None

“主要”是因为,如 csv 示例中所示,“Synchronize”不在我的 csv 文件的 FileSystemRights 列中。仅键入 $FileSystemRights 只会提供预期的修改值。

同步条目是否混淆了我糟糕的脚本,或者我搞砸了一些不同的东西?如果是同步,我该如何摆脱它?我的理解是,如果没有列出,它将默认应用。

Thanks!


啊,好的,所以你要导出一个列表Access Control R规则(ACR),然后尝试应用单个规则作为Access Control L是。您需要一个规则列表,而不是单个规则。通常您要做的就是获取当前的规则列表,对其进行修改(添加更多规则或删除不需要的规则),然后将修改后的列表应用回对象。

如果导出 ACL,您显然知道如何获取它,但我将其包含在此处。这提供了获取 ACL、向其添加规则,然后将更新的 ACL 应用回文件夹的示例。

# Define the access rule(s) to add to the ACL
$New_ACR = New-Object Security.AccessControl.FileSystemAccessRule $IdentityReference, $FileSystemRights, $InheritanceFlag, $PropagationFlag, $AccessControlType
# Get Access Control List from directory
$ACL = Get-Acl -Path "$RootDir\$FolderPath"
# Add new rule to ACL
$ACL.AddAccessRule($New_ACR)
# Apply updated ACL to directory
Set-Acl -Path "$RootDir\$FolderPath" -AclObject $ACL -WhatIf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell 在导入 csv 时出现 Set-ACL 问题 的相关文章

随机推荐

  • PHP 负面因素不断增加

    我这里有这个代码 remaining 0 foreach clientArrayInvoice as key gt row remaining remaining row total 它的作用是 它获取总计值并将它们相加 但是当我有负值时
  • 双弧形

    我目前正在尝试生成 波浪形幽灵底部 形状 该形状包含两条双曲线 虽然底部的部分这个图片 http images clipartpanda com ghost clip art castle ghost clipart1 jpg我认为以更好的
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • 游标索引越界异常

    打开后出现光标索引越界错误 数据库 请任何人告诉我如何打开现有数据库 sqllite Android 我想在数据库上触发一个选择查询 检索一些信息 public void getPatient SQLiteDatabase db Strin
  • 如何忽略 LeakCanary 中的某些类?

    有人能给我一个如何忽略 LeakCanary 中的某些类的有效示例吗 我正在查看这个示例 以忽略 LeakCanary 中第三方库中的某些类 但我不知道将其放在应用程序中的何处 我把它放在我的应用程序类中 但这些变量和方法有错误 isInA
  • postgresql 选择不同的最新记录

    我有一个像这样的表 id fkey srno remark date 1 A001 1 2 A001 2 3 A002 1 4 A003 1 5 A002 2 我想要基于 max srno 的不同最新记录 例如 2 A001 2 4 A00
  • 如何使用material2工具栏、按钮和Angular-CLI路由器

    我有以下文件 html
  • 使用 Eclipse 将具有外部依赖项的 Java 项目导出到 jar

    有没有一种简单的方法可以将 Java 项目 包括其所有外部依赖项 导出到标准 jar 文件 我开发了一个使用多个 Apache 库的 SDK 我希望能够将该项目作为单个 jar 发布 到目前为止我找到的这个问题的答案要求将项目打包为 Run
  • 我是唯一一个收到“当前目标框架中不可用的程序集”的人吗?

    在添加测试项目后 我在使用 Visual Studio 2010 和任何报告此错误的框架版本时遇到了一个持续存在的问题 当前目标框架中不提供程序集 到目前为止 我只在两个程序集上发生过这种情况 并且始终一致 系统服务流程 系统 配置 安装
  • 如何在Mac上使用AVFoundation将图片编码为H264,而不是使用x264

    我正在尝试制作一个 Mac 广播客户端 使用 FFmpeg 但不使用 x264 库编码为 H264 所以基本上 我可以从 AVFoundation 中获取原始帧CMSampleBufferRef or AVPicture 那么有没有一种方法
  • 插入多行而不重复语句的“INSERT INTO ...”部分?

    我知道我几年前就已经这样做过 但我不记得语法了 而且由于提取了大量有关 批量导入 的帮助文档和文章 我在任何地方都找不到它 这就是我想做的 但语法不完全正确 请以前做过此操作的人帮助我 INSERT INTO dbo MyTable ID
  • 是否可以禁用特定 jQuery Ajax 调用的 Turbolinks 以防止页面刷新和滚动?

    我有一个 Rails 5 应用程序 非常想使用 Turbolinks 在应用程序中 有几个 PATCH ajax 调用 它们只是用新数据更新服务器 但不需要担心更新页面的状态 每当这些 ajax 请求返回时 Turbolinks 就会刷新页
  • 使用 powershell 进行 Azure DevOps git checkout

    我正在尝试使用 Azure Pipelines yaml 从 powershell 脚本中使用 git 进行结帐 当我在构建过程中运行以下命令时 我的构建挂起 task PowerShell 2 displayName Update rea
  • 如何在 laravel 5 中注册自定义错误处理程序?

    我正在开发一个 Laravel 包 有一个提供视图和一切的服务提供商 但我需要自定义错误消息 如何在我的服务提供商中注册自定义错误处理程序 您可以通过将自定义处理程序与服务提供者上的 Laravel 异常处理程序类绑定来注册自定义处理程序
  • Django模型表单同时保存两次post请求

    I am using django bootstrap modal forms 1 3 1 following https pypi org project django bootstrap modal forms but if I run
  • 使用“union”和“enum”的好例子?

    我试图理解以下内容 Union 就像一个变量 我可以在其中存储不同类型的值 如果其中存储了 float 类型的值 但我将其读为 short 怎么办 有什么方法可以确定我将从 union 检索的值的类型吗 我该如何处理此类案件 我在某处看到一
  • 使用selenium IDE提取部分文本并将其放入变量中

    有人可以告诉我应该使用哪个命令来使用 Selenium Ide 从文本中仅提取数字 694575 并将其放入变量中以供进一步使用 这是带有文本的 div div class loginBoxTitle Edit Exhibition Cen
  • sos.dll 在 Visual Studio 2013 中的使用

    当我阅读文档时关于 sos dll MSDN http msdn microsoft com en us library bb190764 v vs 110 aspx 遇到一张纸条说 如果您使用的是 Visual Studio 2013 则
  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • Powershell 在导入 csv 时出现 Set-ACL 问题

    我使用一个脚本将 ACL 从一个系统导入到 csv 中 并使用另一个脚本读取 csv 创建文件夹结构并将权限应用到新系统 由于安全限制 系统不可能相互连接 因此不能选择 robocopy 正在创建新的文件夹结构 但 ACL 未应用 并且出现