none
помогите - скрипт для назначения прав доступа RRS feed

  • Вопрос

  • есть файловый сервер на базе вин 2008 р2, собираемся переделывать структуру хранения папок.  хочется автоматизировать  одно действие, т.е. сервер имеет путь \\domen.local\shared\%Deportament%\internal\%Otdel%\  на отдел хочется отдельно права, притом хочется сразу сделать наосове групы чтобы не добавлять пользователей к папке, в результате необходимо создать в AD (раньше была схема 2000 и сделали апгрейд на 2003, позже будем делать миграцию на 2008 р2) 3 группы

    1 %Deportament%-%Otdel%-read 

    2 %Deportament%-%Otdel%-write

    3 %Deportament%-%Otdel%-full

    и присвоить эти группы на папку в соотведствии с названиями, риды тоько читают, писатели могут записывать а полные могут делать все,

     

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

    8 сентября 2010 г. 18:52

Ответы

  • $path = # Путь к папке
    $user = # Группа или пользователь которому назначаються права
    
    
    $path = $path.replace("\", "\\")
    $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
    $ace = ([WMIClass] "Win32_ace").CreateInstance()
    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
    $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
    [byte[]] $SIDArray = ,0 * $SID.BinaryLength
    $SID.GetBinaryForm($SIDArray,0)
    $Trustee.Name = $user
    $Trustee.SID = $SIDArray
    $ace.AccessMask = [System.Security.AccessControl.FileSystemRights]"FullControl"
    $ace.AceFlags = "0x3"
    $ace.AceType = 0
    $ace.Trustee = $trustee
    # читаем текущий ACL с объекта
    $oldDACL = (gwmi Win32_LogicalFileSecuritySetting -filter "path='$path'").GetSecurityDescriptor().Descriptor.DACL
    # добавляем его к пустому объекту DACL
    $SD.DACL = $oldDACL
    # и добавляем новый ACE
    $SD.DACL += @($ace.psobject.baseobject)
    # устанавливаем флаг SE_DACL_PRESENT
    $SD.ControlFlags = "0x4"
    $folder = gwmi Win32_LogicalFileSecuritySetting -filter "path='$path'"
    $folder.setsecuritydescriptor($SD)
    
    Помогу с назначение на полный доступ, недавно использовал этот код для присвоения 7 тыш папкам разных владельцев
    20 сентября 2010 г. 5:54