Автоматизация для создания папок и создания групп безопасности для уже установленной структуры папок - PullRequest
0 голосов
/ 07 мая 2019

В нашей организации общий сетевой ресурс разбит на папки корневого / родительского уровня для различных групп / отделов / проектов или для совместной работы.

Типичная структура будет выглядеть примерно так: Бухгалтерский учет (корневой / родительский)Все (второй уровень / дочерний) Администратор (второй уровень / дочерний) Общий (второй уровень / дочерний)

У нас будет группа корневого уровня, назначенная для учета и обеспечивающая доступ только для чтения к этой папке.Тогда бы мы имели группы Read / Write и ReadOnly, назначенные на втором уровне, которые были бы членами группы корневого уровня.Пользователи назначаются в группы второго уровня, а доступ осуществляется только на втором уровне.

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

Теперь я хотел бы добавить к сценарию, чтобы сначала спросить пользователя, создаете ли вы новую корневую папку с нуля или добавляете в существующую структуру папок?

Если я добавляю в существующую структуру папок, как я могу перебрать «диск G», пользователь должен выбрать корневую папку, которую он тоже хочет добавить.Отобразите и выберите группы безопасности, назначенные в этой корневой папке.А затем создайте две новые группы безопасности и назначьте правильный доступ.

Мой оригинальный сценарий выглядит следующим образом.

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

Import-Module ActiveDirectory
$path = "\\earth\data\group\"
$newFolderName = Read-Host -Prompt "Enter Name of New Folder"
$newFolderFull = $path + $newFolderName
Write-Output "New Folder will be: $newFolderFull"
$confirm = Read-Host "Confirm? Y/N"
If(!(($confirm) -ne "y"))
{
  Write-Output "Create AD Groups"
  $groupNamePGroup = "EG_P-$newFolderName"
  $groupNameAdminRW = "EG-$newFolderName-Admin-RW"
  $groupNameAdminRF = "EG-$newFolderName-Admin-RF"
  $groupNameEveryoneRW = "EG-$newFolderName-Everyone-RW"
  $groupNameEveryoneRF = "EG-$newFolderName-Everyone-RF"
  $groupNameScannedDocsRW = "EG-$newFolderName-ScannedDocs-RW"

  New-AdGroup $groupNamePGroup -samAccountName $groupNamePGroup -GroupScope DomainLocal -path "OU=SecurityGroups,OU=Metro,DC=metrogr,DC=org"
  New-AdGroup $groupNameAdminRW -samAccountName $groupNameAdminRW -GroupScope DomainLocal -path "OU=SecurityGroups,OU=Metro,DC=metrogr,DC=org"
  New-AdGroup $groupNameAdminRF -samAccountName $groupNameAdminRF -GroupScope DomainLocal -path "OU=SecurityGroups,OU=Metro,DC=metrogr,DC=org"
  New-AdGroup $groupNameEveryoneRW -samAccountName $groupNameEveryoneRW -GroupScope DomainLocal -path "OU=SecurityGroups,OU=Metro,DC=metrogr,DC=org"
  New-AdGroup $groupNameEveryoneRF -samAccountName $groupNameEveryoneRF -GroupScope DomainLocal -path "OU=SecurityGroups,OU=Metro,DC=metrogr,DC=org"
  New-AdGroup $groupNameScannedDocsRW -samAccountName $groupNameScannedDocsRW -GroupScope DomainLocal -path "OU=SecurityGroups,OU=Metro,DC=metrogr,DC=org"

  Write-Output "Add Folder.."
  New-Item $newFolderFull -ItemType Directory
  New-Item $newFolderFull\Admin -ItemType Directory
  New-Item $newFolderFull\Everyone -ItemType Directory
  New-Item $newFolderFull\ScannedDocs -ItemType Directory
  New-Item $newFolderFull\Everyone\ScannedDocs -ItemType Directory

  Write-Output "Remove Inheritance.."
  icacls $newFolderFull /inheritance:d
  icacls $newFolderFull\Admin /inheritance:d
  icacls $newFolderFull\Everyone /inheritance:d
  icacls $newFolderFull\ScannedDocs /inheritance:d

  # Rights
  $readOnly = [Security.AccessControl.FileSystemRights]"ReadAndExecute"
  $readWrite = [Security.AccessControl.FileSystemRights]"Write","DeleteSubdirectoriesAndFiles","ReadAndExecute"

  # Inheritance
  $inheritanceFlag = [Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
  $rootInheritanceFlag = [Security.AccessControl.InheritanceFlags]"None"

  # Propagation
  $propagationFlag = [Security.AccessControl.PropagationFlags]::None

  # User Groups
  $PUserRF = New-Object System.Security.Principal.NTAccount($groupNamePGroup)
  $AdminUserRW = New-Object System.Security.Principal.NTAccount($groupnameAdminRW)
  $AdminUserRF = New-Object System.Security.Principal.NTAccount($groupnameAdminRF)
  $EveryoneUserRW = New-Object System.Security.Principal.NTAccount($groupnameEveryoneRW)
  $EveryoneUserRF = New-Object System.Security.Principal.NTAccount($groupnameEveryoneRF)
  $ScannedDocsUserRW = New-Object System.Security.Principal.NTAccount($groupnameScannedDocsRW)

  # Type
  $type = [Security.AccessControl.AccessControlType]::Allow

  #Add Group membership
  Add-ADGroupMember -Identity $groupNamePGroup -Members $groupNameAdminRW,$groupNameAdminRF,$groupNameEveryoneRW,$groupNameEveryoneRF,$groupNameScannedDocsRW
  Add-ADGroupMember -Identity $groupNameEveryoneRW -Members NDPSSCAN
  Add-ADGroupMember -Identity $groupNameScannedDocsRW -Members NDPSSCAN

  # ACL
  $accessControlEntryDefault = New-Object System.Security.AccessControl.FileSystemAccessRule @("Domain Users", $readOnly, $inheritanceFlag, $propagationFlag, $type)
  $accessControlRootEntryRF = New-Object System.Security.AccessControl.FileSystemAccessRule @($PUserRF, $readOnly, $rootInheritanceFlag, $propagationFlag, $type)
  $accessControlAdminEntryRW = New-Object System.Security.AccessControl.FileSystemAccessRule @($AdminUserRW, $readWrite, $inheritanceFlag, $propagationFlag, $type)
  $accessControlAdminEntryRF = New-Object System.Security.AccessControl.FileSystemAccessRule @($AdminUserRF, $readOnly, $inheritanceFlag, $propagationFlag, $type)
  $accessControlEveryoneEntryRW = New-Object System.Security.AccessControl.FileSystemAccessRule @($EveryoneUserRW, $readWrite, $inheritanceFlag, $propagationFlag, $type)
  $accessControlEveryoneEntryRF = New-Object System.Security.AccessControl.FileSystemAccessRule @($EveryoneUserRF, $readOnly, $inheritanceFlag, $propagationFlag, $type)
  $accessControlScannedDocsEntryRW = New-Object System.Security.AccessControl.FileSystemAccessRule @($ScannedDocsUserRW, $readWrite, $inheritanceFlag, $propagationFlag, $type)

  #Wait 5 seconds (Script was running to quickly and having issues with ACL)
  Write-Output "Wait 5"
  Start-Sleep 1
  Write-Output "Wait 4"
  Start-Sleep 1
  Write-Output "Wait 3"
  Start-Sleep 1
  Write-Output "Wait 2"
  Start-Sleep 1
  Write-Output "Wait 1"
  Start-Sleep 1

  #Set Access Controls
  #Using SetAccessControl instead of Set-ACL as InfoSec accounts don't have the required security permission
  $objACL = Get-ACL $newFolderFull
  $objACL.RemoveAccessRuleAll($accessControlEntryDefault)
  $objACL.AddAccessRule($accessControlRootEntryRF)
  #Set-ACL $newFolderFull $objACL
  (Get-Item -Path $newFolderFull).SetAccessControl($objACL)

  $objACL = Get-ACL $newFolderFull\Admin
  $objACL.RemoveAccessRuleAll($accessControlEntryDefault)
  $objACL.AddAccessRule($accessControlAdminEntryRW)
  $objACL.AddAccessRule($accessControlAdminEntryRF)
  #Set-ACL $newFolderFull\Admin $objACL
  (Get-Item -Path $newFolderFull\Admin).SetAccessControl($objACL)

  $objACL = Get-ACL $newFolderFull\Everyone
  $objACL.RemoveAccessRuleAll($accessControlEntryDefault)
  $objACL.AddAccessRule($accessControlEveryoneEntryRW)
  $objACL.AddAccessRule($accessControlEveryoneEntryRF)
  #Set-ACL $newFolderFull\Everyone $objACL
  (Get-Item -Path $newFolderFull\Everyone).SetAccessControl($objACL)

  $objACL = Get-ACL $newFolderFull\ScannedDocs
  $objACL.RemoveAccessRuleAll($accessControlEntryDefault)
  $objACL.AddAccessRule($accessControlScannedDocsEntryRW)
  #Set-ACL $newFolderFull\ScannedDocs $objACL
  (Get-Item -Path $newFolderFull\ScannedDocs).SetAccessControl($objACL)
}
$folders = get-childitem "\\earth\data\group\" | where {$_.mode -like "d*"}

# folder list

$n = 1

foreach ($folder in $folders)

{

$fName = $folder.FullName

"$n : $fname"

$n++

}

$choice = read-host -Prompt "Which folder would you like to add too?"

$choice = $choice -1

$rootFolder = $folders[$choice]

$rootFolder

Write-Output "Please verify a valid EG_P Group"
((Get-Item "\\earth\data\group\$rootFolder").GetAccessControl('Access')).Access
...