2015-02-03 2 views
1

Попытка моей руки в Powershell, и я пытаюсь выяснить, как добавить определенные разрешения для нашей учетной записи пользователя. Код ниже добавит учетную запись службы в папки Security, однако она не будет изменять разрешения. Любая идея почему?Добавить права доступа к папке через Powershell

#variables 
$okeeffename = "WCFService" 
$domain = "InsideServices.dev.com" 
$okeeffedirectory = "d:\webcontent\$domain\$okeeffename" 

#create webcontent and application folders 
Write-Host "Creating directories" -ForegroundColor Yellow 
New-Item -Path $okeeffedirectory -type directory -ErrorAction Stop 

#adjust security for folders 
$okeefferights = Get-Acl $okeeffedirectory 
$read = New-Object system.security.accesscontrol.filesystemaccessrule($useraccount, "Read", "Allow") 
$list = New-Object system.security.accesscontrol.filesystemaccessrule($useraccount, "ListDirectory", "Allow") 
$readexecute = New-Object system.security.accesscontrol.filesystemaccessrule($useraccount, "ReadAndExecute", "Allow") 
$okeefferights.SetAccessRule($read) 
$okeefferights.SetAccessRule($list) 
$okeefferights.SetAccessRule($readexecute) 
Set-Acl -Path $okeeffedirectory -AclObject $okeefferights 

Второй вопрос: я пытаюсь добавить следующие разрешения для учетной записи службы в эту папку. Может ли кто-то указать ключевое слово Powershell для разрешения List Folder Contents?

enter image description here

EDIT

переключая значение Allow/Deny для FileSystemRights я обнаружил, что каждый из спецификации Изменяется только Special Permissions разрешение на папку. Быстрый снимок экрана:

enter image description here

ответ

3

Это довольно легко узнать, когда вы знаете, что именно вы ищете. Что вам нужно, это [System.Security.AccessControl.FileSystemRights]. Мы можем найти список прав доступных с помощью [перечисление], как, например:

PS C:\windows\system32> [enum]::GetNames([System.Security.AccessControl.FileSystemRights]) 

ListDirectory 
ReadData 
WriteData 
CreateFiles 
CreateDirectories 
AppendData 
ReadExtendedAttributes 
WriteExtendedAttributes 
Traverse 
ExecuteFile 
DeleteSubdirectoriesAndFiles 
ReadAttributes 
WriteAttributes 
Write 
Delete 
ReadPermissions 
Read 
ReadAndExecute 
Modify 
ChangePermissions 
TakeOwnership 
Synchronize 
FullControl 

Вы можете создать несколько прав в одном объекте, как (это должно позволить пользователю читать/выполнять только доступ к папке и ее содержание) :

$Rights = [System.Security.AccessControl.FileSystemRights]"ListDirectory,ReadData,Traverse,ExecuteFile,ReadAttributes,ReadPermissions,Read,ReadAndExecute" 

Мой обычный шаблон для настройки списков ACL заключается в следующем:

$Rights = [System.Security.AccessControl.FileSystemRights]"FullControl" 

$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]"ObjectInherit,ContainerInherit" 
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None 

$objType =[System.Security.AccessControl.AccessControlType]::Allow 

$objUser = New-Object System.Security.Principal.NTAccount("Domain\User") 

$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule($objUser, $Rights, $InheritanceFlag, $PropagationFlag, $objType) 

$objACL = Get-ACL "C:\Temp" 
$objACL.AddAccessRule($objACE) 

Set-ACL "C:\Temp" $objACL 

Из того, что вы должны быть в состоянии манипулировать код для выполнения того, что вы хотите.

+0

Вау, спасибо большое. Есть ли сайт или учебник, рекомендуемый для изучения синтаксиса? – NealR

+0

Хотелось бы ... К сожалению, изучение этого всего было довольно сложным. Здесь есть хорошие темы, которые вы можете прочитать, чтобы помочь. – TheMadTechnician

+0

Работал как шарм. Спасибо! –

2

Для создания ACE, который показывает вверх, как "Список содержимого папки" на вкладке "Безопасность" вы должны объединить 5 file system rights:

  • ListDirectory
  • ReadAttributes
  • ReadExtendedAttributes
  • ReadPermissions
  • Traverse

и установить наследование ContainerInherit.

$list = New-Object Security.AccessControl.FileSystemAccessRule($useraccount, 'Traverse,ListDirectory,ReadAttributes,ReadExtendedAttributes,ReadPermissions', 'ContainerInherit', 'None', 'Allow') 

самый простой способ узнать конкретную комбинацию прав файловой системы и флагов наследования для конкретного ACE является создание его вручную и проверьте результат в Дополнительные параметры безопасности:

"Security" tab of properties dialog "Advanced Security Settings" dialog "Change Advanced Security Settings" dialog "Permission Entry" dialog

Смежные вопросы