none
Скрипт для создания структуры папок и назначения прав на них RRS feed

  • Вопрос

  • Добрый день. Помогите скриптом.

    Задача. Создавать в определённой папке (Допустим D:\Test), папку с названием, переданным через аргумент скрипту и определённой структурой папок внутри ее, также необходимо раздать права на эти папки.

    Структура папок следующая - Папка с названием переданным через аргумент, а в ней уже папки Папка1, Папка2, Папка3.

    Права на папки - Папка с названием, переданным через аргумент (Гр1 - чтение, Гр2 - чтение), Папка1 (Гр1 - полный, Гр2 - полный), Папка2 и Папка3 (Гр1 - чтение, Гр2 - полный, Гр3 - Созд. владелец)

    13 февраля 2013 г. 8:57

Ответы

  • На PowerShell:

    Function Create-Folder 
    {
    	param($FolderName)
    	
    	$folders = "Папка1", "Папка2", "Папка3"
    	
    	try {
    		#Корневая папка
    		md $FolderName -ErrorAction Stop | Out-Null
    		#Дочерние
    		$objFolder = $folders | Foreach { md (Join-Path $FolderName $_)} 
    		
    		#Группы
    		$gr1 = [System.Security.Principal.NTAccount]"Domain\Gr1"
    		$gr2 = [System.Security.Principal.NTAccount]"Domain\Gr2"
    		$gr3 = ([System.Security.Principal.SecurityIdentifier]"S-1-3-0").Translate([System.Security.Principal.NTAccount])
    		
    		#Правила
    		$rule1 = New-Object System.Security.AccessControl.FileSystemAccessRule ($gr1, "Read", "Allow")
    		$rule2 = New-Object System.Security.AccessControl.FileSystemAccessRule ($gr2, "Read", "Allow")		
    		
    		$rule3 = New-Object System.Security.AccessControl.FileSystemAccessRule ($gr1, "FullControl", "Allow")
    		$rule4 = New-Object System.Security.AccessControl.FileSystemAccessRule ($gr2, "FullControl", "Allow")
    		
    		$rule5 = New-Object System.Security.AccessControl.FileSystemAccessRule ($gr3, "FullControl", "Allow")
    		#Разрешение для папки		
    		$acl = Get-Acl $objFolder[0].FullName
    		$acl.SetAccessRuleProtection($true,$false)
    		$acl.AddAccessRule($rule3)
    		$acl.AddAccessRule($rule4)
    		$acl | Set-ACL $objFolder[0].FullName
    		
    		$acl = Get-Acl $objFolder[1].FullName
    		$acl.SetAccessRuleProtection($true,$false)
    		$acl.AddAccessRule($rule1)
    		$acl.AddAccessRule($rule4)
    		$acl.AddAccessRule($rule5)
    		$acl | Set-ACL $objFolder[1].FullName
    		
    		$acl = Get-Acl $objFolder[2].FullName
    		$acl.SetAccessRuleProtection($true,$false)
    		$acl.AddAccessRule($rule1)
    		$acl.AddAccessRule($rule4)
    		$acl.AddAccessRule($rule5)
    		$acl | Set-ACL $objFolder[2].FullName	
    		
    		$acl = Get-ACL $FolderName
    		$acl.AddAccessRule($rule1)
    		$acl.AddAccessRule($rule2)
    		$acl | Set-ACL $FolderName
    	}
    	catch {
    		"$_"
    	}
    }

    13 февраля 2013 г. 10:52
    Отвечающий