не в состоянии связать ForEach-Object и New-Object - PullRequest
0 голосов
/ 06 октября 2019

У меня есть файл 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
Cannot convert argument "rule", with value: "System.Object[]", for
"SetAccessRule" to type "System.Security.AccessControl.FileSystemAccessRule":
"Cannot convert the "System.Object[]" value of type "System.Object[]" to type
"System.Security.AccessControl.FileSystemAccessRule"."
At C:\Users\shaker\Desktop\f1.ps1:6 char:17
+ ForEach-Object {$mt.SetAccessRule($AccessRule)}
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

1 Ответ

0 голосов
/ 07 октября 2019

Ваш код в основном говорит: «создайте список путей, создайте список правил доступа, затем примените все правила доступа ко всем путям». То, что вы, вероятно, хотите, это применить правило доступа для любого данного имени к соответствующему пути. Вам также необходимо вернуть 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
}
...