【问题标题】:not able to relate ForEach-Object and New-Object无法关联 ForEach-Object 和 New-Object
【发布时间】:2019-10-06 04:37:39
【问题描述】:

我有 CSV 文件,其中有名称和文件夹路径。我想为每个名称和文件夹路径提供文件权限。

我正在使用以下代码

$mt = Import-Csv “C:\Users\shaker\Desktop\access.csv” |
      ForEach-Object {Get-Acl -Path $_.file}

$Accessrule = Import-Csv “C:\Users\shaker\Desktop\access.csv” |
              ForEach-Object {New-Object System.Security.AccessControl.FileSystemAccessRule ($_.name,"FullControl","Allow")}
ForEach-Object {$mt.SetAccessRule($AccessRule)}

但我遇到了一些错误

PS C:\Users\shaker> C:\Users\shaker\Desktop\f1.ps1 无法转换参数“规则”,其值为:“System.Object []”,用于 “SetAccessRule”键入“System.Security.AccessControl.FileSystemAccessRule”: “无法将“System.Object[]”类型的“System.Object[]”值转换为类型 “System.Security.AccessControl.FileSystemAccessRule”。 在 C:\Users\shaker\Desktop\f1.ps1:6 char:17 + ForEach-对象 {$mt.SetAccessRule($AccessRule)} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodException + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

【问题讨论】:

    标签: powershell powershell-4.0


    【解决方案1】:

    您的代码本质上是“构建路径列表,构建访问规则列表,然后将所有访问规则应用于所有路径”。您可能想要的是将任何给定名称的访问规则应用于相应的路径。如果要使其生效,还需要将 ACL 写回。

    Import-Csv "C:\Users\shaker\Desktop\access.csv" | ForEach-Object {
        $acl = Get-Acl $_.file
        $ace = New-Object Security.AccessControl.FileSystemAccessRule ($_.name, 'FullControl', 'Allow')
        $acl.SetAccessRule($AccessRule)
        $acl | Set-Acl $_.file
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 1970-01-01
      • 2014-02-10
      • 2016-08-07
      • 2015-09-22
      • 2021-07-26
      • 1970-01-01
      • 2011-08-12
      • 2011-07-13
      相关资源
      最近更新 更多