Я использую следующий массив для применения разрешений к каталогам, но получаю сообщение об ошибке:
New-Object: Не удается найти перегрузку для "FileSystemAccessRule" и счетчика аргументов: "1".
$psarray = @(
('xppusers', 'D:\XPP\xz\bin', 'Read'),
('xppusers', 'D:\XPP\xz\sys\config', 'Read'),
('xppusers', 'D:\XPP\sd_liz', 'Read'),
('xppusers', 'D:\XPP\xz\help', 'Read')
)
foreach($item in $psarray)
{
$permission = "'" + $item[0] + "', '" + $item[2] + "', 'ContainerInherit, ObjectInherit', 'None', 'Allow'"
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path $item[1]
}
И полная ошибка:
New-Object : Cannot find an overload for "FileSystemAccessRule" and the argument count: "1".
At C:\GPO-Installers\permissions-array.ps1:20 char:13
+ $rule = New-Object -TypeName System.Security.AccessControl.FileSy ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
Если я создаю разрешение $ вручную, оно работает нормально.
Например:
$permission = 'xppusers', 'read', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
Не конечно, если я ошибся и был бы очень признателен за помощь.
Спасибо.
РЕДАКТИРОВАТЬ:
Благодаря @ mklement0 я поиграл с этим и получил это работает. На каком-то этапе, когда давление снижается, я go вернусь и пойму это правильно, а не просто скопирую / вставлю свой путь через эту проблему.
Я получил эту работу, создав необходимые переменные внутри foreach l oop, а затем использовать их в New-Object.
foreach($item in $UserGroupPermissionArray)
{
$UserGroup = $item[0]
$Path = $item[1]
$acl = Get-Acl -Path $Path
$FileSystemRights = $item[2]
$InheritanceFlag = "ContainerInherit"
$PropagationFlag = "None"
$AccessControlType = "Allow"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($UserGroup, $FileSystemRights, $InheritanceFlag, $PropagationFlag, $AccessControlType)
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path $Path
}