Powershell: невозможно установить права доступа к папке моделей - PullRequest
0 голосов
/ 06 июня 2018

В PowerShell

Я создал папку модели и запустил:

Get-ACL \\server\folder | % {$_.Access}

Вот вывод для разрешений, которые я хотел бы эмулировать:

FileSystemRights  : DeleteSubdirectoriesAndFiles, Modify, Synchronize
AccessControlType : Allow
IdentityReference : CONTOSO\bgates
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

Другими словами: я перешел к расширенным настройкам безопасности для bgates и дал ему полный доступ и снял флажок «Взять на себя владение».

Я пытаюсь ввести вышеуказанную часть в поле FileSystemRights в скрипт, который я нашел в Интернете(по жизни я не могу найти ссылку), чтобы он мог создать папку с такими же разрешениями.

# this script checks to see if the folder has already been created
# if it hasn't it will create the folder then sets permissions on it
# then verifies if the folder has been created or not
# NEED TO CHANGE PATH ($Path = '\\server\folder\folder') !!!
# NEED TO CHANGE USER PERMISSION ($permission = 'UserAliasGoesHere') !!!

# this is the path for the new folder
$Path = '\\server\folder'

# test to see if folder already exists
if (Test-Path $Path) {
Write-Host -ForegroundColor Yellow "
-------------------------------------------------------
`n
The folder has previously been created. No action taken
`n
-------------------------------------------------------
"
}
else {
# create new folder
$null = New-Item -Path $Path -ItemType Directory
# get permissions
$acl = Get-Acl -Path $path

# add a new permission (FullControl, Modify, Read)
$permission = 'bobmarley', 'Allow', 'Deletesubdirectories', 'Modify', Synchronize'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)

# set new permissions
$acl | Set-Acl -Path $path 
# verify the folder has been created
if (Test-Path $Path) {
Write-Host -ForegroundColor Green "
----------------------------
`n
The folder has been created.
`n
----------------------------
"
}
else {
Write-Host -ForegroundColor Red "
--------------------------------
`n
The folder has not been created.
`n
--------------------------------
"
}
}

Конечно, это трагически завершается ошибкой со следующим сообщением об ошибке:

New-Object: Невозможно преобразовать аргумент "1" со значением: "Allow",для "FileSystemAccessRule" ввести "System.Security.AccessControl.FileSystemRights": "Невозможно преобразовать значение" Разрешить "для ввода" System.Security.AccessControl.FileSystemRights ". Ошибка:" Невозможно сопоставить имя идентификатора Разрешить допустимое имя перечислителя,Укажите одно из следующих имен перечислителей и повторите попытку: ListDirectory, ReadData, WriteData, CreateFiles, CreateDirectories, AppendData, ReadExtendedAttributes, WriteExtendedAttributes, Traverse, ExecuteFile, DeleteSubdirectoriesAndFiles, ReadAttributes, WriteAttributes, Write, Delete, ReadE ReadE Reader Reader, TakeOwnership, Synchronize, FullControl "" В строке: 28 символов: 9 + $ rule = New-Object -TypeName System.Security.AccessControl.FileSystem ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [New-Object], MethodException + FullyQualifiedErrorId: ConstructorInvokedThrowException, Microsoft.PowerShell.Commands.NewObjectCommand

Исключение, вызывающее «SetAccessRule» с аргументом «1»: «Значение не может быть нулевым. Параметрname: rule "В строке: 29 char: 1 + $ acl.SetAccessRule ($ rule) + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: ArgumentNullException

Я читаю сообщения об ошибках и, конечно, не нахожу здесь никакой комбинации моего вывода get-acl.

Теперь, очевидно, я думаю, чтоПроблема в том, что я не понимаю, как перевести разрешения, которые я хочу, в этот скрипт.Я предполагаю, что, возможно, этот скрипт или New-Object -TypeName является неправильным, но я не могу найти документацию для "-ArgumentList", так что я знаю, как подключить разрешения.

Я был бы очень признателен, если бы кто-нибудь показал мне, что я делаю здесь неправильно, и показал мне подходящий способ настройки разрешений, которые я ищу.

Бесконечная благодарность, мистерАнтифриз

1 Ответ

0 голосов
/ 06 июня 2018

Синтаксис, используемый при определении вашего «разрешения», не соответствует ни одному из конструкторов для объекта filesystemaccessrule.Этот MSDN-сайт содержит значения, которые необходимо указать в каком порядке в разделе Конструктора.Эта статья TechNet содержит пример.Сообщение об ошибке в основном говорит, что это не сработало, потому что Allow не является значением FileSystemRights.

Здесь будет ваше правило с аргументами в правильном синтаксисе и порядке:

$permission = 'bobmarley', 'DeleteSubdirectoriesAndFiles, Modify, Synchronize', 'ContainerInherit, ObjectInherit', 'None', "Allow"
...