none
автоматизация рутины RRS feed

  • Вопрос

  • Добрый день!

    Помогите пожалуйста автоматизировать следующую задачу.

    Необходимо создать N-ое количкство папок с разными именами.

    Имена есть списком в файле "excel"

    Далее из списка безопасности необходимо удалить наследование от верхнеуровневой папки,и удалить группу BUILTIN\Пользователи

    Далее необходимо навесить разрешения

    на все папки "Имя пользователя" = "Имя папки"= разрешение "Modify" + "ИМЯ_ДОМЕНА\ИМЯ_ГРУППЫ"= "Fullcontrol".

    Я пошел длинным путем и на полдороги устал)))

    1. Перегнал список в *.bat + добавил команду "mkdir" в начале каждой строки (создал нужное количество папок).

    2. установил на сервак модуль "NTFSSECURITY"

    3. командой:

    Get-ChildItem -Path E:\Кирпичи -Recurse -Force | Disable-NTFSAccessInheritance (отключил наследование)

    и далее командой:

    Get-ChildItem -Path C:\distr -Recurse | Get-NTFSAccess -Account 'BUILTIN\Пользователи' -ExcludeInherited |Remove-NTFSAccess -PassThru

    удалил из списка "ACL" Группу "Пользователи"

    4. следующей конструкцией навесил права "Имя пользователя" "Modify" "Имя папки" (Имя папки = Имя пользователя)

    Add-NTFSAccess –Path '.\имя_папки=имяпользователя\'  –Account 'имя_доменя\имя_пользователя' –AccessRights Modify

    Только эту конструкцию я сперва сделал ручками для каждой папки и пользователя в файлике и потом вручную вводил в окно "PS", и самое главное забыл добавить пермишены для еще одной группы.

    Но тут тоже нюансы: список не совсем соответствовал реальным пользователям поэтому пришлость сделать работу над ошибками, исправить имена пользователей и папок, чтоб команда правильно отработала.

    Так что для полной красоты необходимо сделать проверку правильности пользователей.(исправлять можно и ручками)

    Создать группу и в нее затолкать пользователей из списка из файла "excell"

    Помогите людидобрые))

    23 марта 2020 г. 11:38

Ответы

  • если каталоги у вас уже созданы и имя каталога в большинстве своем похоже на имя пользователя то то вы можете пройтись foreach'ем по ним и использовать динамические переменные $_ или $ PSItem

    get-childitem c:\path\to\users\dir -Directory |foreach {
       add-ntfsaccess -Path $_.fullname -account "Domain\$($_.name)" -accessrights modify
    }
    если продолжать мысль то можно соорудить нечто такое
    $ErrorActionPreference = 'Stop'
    get-childitem c:\path\to\users\dir -Directory | foreach {
       $success = $false 
       $retries = 1
       $path = $_.fullname
       $name = $_.name
       do {
          try {
             add-ntfsaccess -Path $path -account "Domain\$name" -accessrights modify
             # Тут можете добавить проверку что права добавились и если добавились то $success = $true 
             $success = $true
          } catch {
             # $retry нужен для того чтоб вы не застряли на одном месте если будут какие-то затыки с пользюком
             $retry++
             Write-Host "Something going incorrect for path $path or user $user. Error is: $_"
             $name = Read-Host "Provide correct username "
          }
       } Until ($success -or $retries -gt 3)
    }



    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа realet 23 марта 2020 г. 21:30
    • Изменено Vector BCOModerator 23 марта 2020 г. 21:51
    23 марта 2020 г. 13:47
    Модератор

Все ответы

  • День добрый!

    Домашнее задание делаете? ;)

    Прошу извинения за офф - не удержался.


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"

    23 марта 2020 г. 12:11
  • Все в порядке)))

    Но нет.

    Есть задача, необходимо сделать, просто за все  время несколько раз  подобные задачи попадались, надоело ручками ковырять. в моем случае это 65 папок\пользователей, но  может же быть и 1000+.

    Вообщем очень муторно.

    23 марта 2020 г. 12:19
  • если каталоги у вас уже созданы и имя каталога в большинстве своем похоже на имя пользователя то то вы можете пройтись foreach'ем по ним и использовать динамические переменные $_ или $ PSItem

    get-childitem c:\path\to\users\dir -Directory |foreach {
       add-ntfsaccess -Path $_.fullname -account "Domain\$($_.name)" -accessrights modify
    }
    если продолжать мысль то можно соорудить нечто такое
    $ErrorActionPreference = 'Stop'
    get-childitem c:\path\to\users\dir -Directory | foreach {
       $success = $false 
       $retries = 1
       $path = $_.fullname
       $name = $_.name
       do {
          try {
             add-ntfsaccess -Path $path -account "Domain\$name" -accessrights modify
             # Тут можете добавить проверку что права добавились и если добавились то $success = $true 
             $success = $true
          } catch {
             # $retry нужен для того чтоб вы не застряли на одном месте если будут какие-то затыки с пользюком
             $retry++
             Write-Host "Something going incorrect for path $path or user $user. Error is: $_"
             $name = Read-Host "Provide correct username "
          }
       } Until ($success -or $retries -gt 3)
    }



    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа realet 23 марта 2020 г. 21:30
    • Изменено Vector BCOModerator 23 марта 2020 г. 21:51
    23 марта 2020 г. 13:47
    Модератор
  • Огромное-Преогромное Вам СПАСИБО!!!!!

    Все получилось - все работает....

    23 марта 2020 г. 21:30