Создать папку, создать группы объявлений, применить группы к папке и установить разрешения

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

  • Создать папку D:\Test Share
  • Поделиться в тестовом режиме
  • Создать группу объявлений FS-TESTSHARE-R
  • Создать группу объявлений FS-TESTSHARE-RW
  • Применить обе группы к новой общей папке
  • Установите права полного чтения на FS-TESTSHARE-R
  • Установите для разрешений «Полное чтение/права» значение FS-TESTSHARE-RW.
  • Установите права полного доступа на Domain Admins

Это то, что у меня есть до сих пор, и я совершенно не понимаю, как получить остальное и заставить его работать:

$Path = 'c:\TestShare'

# create new folder
$null = New-Item -Path $Path -ItemType Directory

# get permissions
$acl = Get-Acl -Path $path

# add a new permission
$permission = 'domain\FS-TESTSHARE-RW', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)

# set new permissions
$acl | Set-Acl -Path $path

person Shane Johnson    schedule 01.04.2016    source источник
comment
ваш вопрос так смущает, что у вас есть вся команда, просто используйте команду read-host, чтобы получить значение вашей переменной, например $null = read-host, введите имя общей папки   -  person Soheil Hashemi    schedule 02.04.2016
comment
Пожалуйста, сосредоточьтесь на одной вещи за раз, когда задаете вопросы по SO. В настоящее время ответ на ваш вопрос сводится к написанию сценария для вас, поскольку не совсем ясно, о какой конкретной проблеме вы спрашиваете.   -  person Ansgar Wiechers    schedule 02.04.2016
comment
Мой вопрос - это один вопрос... Я пытаюсь понять, как сделать все, что я просил, в 1 большом скрипте.   -  person Shane Johnson    schedule 04.04.2016


Ответы (1)


задавая вопросы в сценарии

Чтобы получить ввод, лучше всего использовать конструкцию param в верхней части вашего файла .ps1, например так:

param([Parameter(Mandatory=$true, Position=0)][ValidateNotNullOrEmpty()] [string] $Path,
[Parameter(Mandatory=$true, Position=1)][ValidateNotNullOrEmpty()] [string[]] $permission)

Затем вы можете указать значения при запуске скрипта следующим образом

.\yourscript.ps1 -path 'c:\TestShare' -permission ('domain\FS-TESTSHARE-RW', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow')

Это дает вам несколько преимуществ по сравнению с read-host. Для начала вы можете принудительно указать тип и указать, что предоставленное значение не является нулевым или пустым, но также позволяет собирать все значения заранее, что означает, что сценарий можно использовать в автоматизированных сценариях, в отличие от Read-Host, который работает только с человеком. ввод значений.

Создание группы безопасности Active Directory, соответствующей общему ресурсу

Вы можете использовать модуль Active Directory PowerShell для создания и обновления групп.

Создайте группу с помощью команды New-ADGroup.

New-ADGroup -Name "FS-TESTSHARE-RW" -SamAccountName "FS-TESTSHARE-RW" -GroupCategory Security -GroupScope Global -DisplayName "Test Share Read-Write" -Path "CN=Users,DC=Fabrikam,DC=Com" -Description "Members of this group have read-write access to the test share"  

Затем используйте команду Add-ADGroupMember, чтобы добавить участников в группу. В следующем примере участники User1 и User2 добавляются в группу FS-TESTSHARE-RW.

Add-ADGroupMember FS-TESTSHARE-RW User1,User2

Что касается сопоставления разрешений, вы уже находитесь на правильном пути, однако я укажу, что вы не должны использовать $null в своих сценариях для значений, поскольку это автоматическая переменная

$null — это автоматическая переменная, которая содержит NULL или пустое значение. Вы можете использовать эту переменную для представления отсутствующего или неопределенного значения в командах и сценариях.

person CodedBeard    schedule 02.04.2016
comment
Спасибо. Это было полезно. Быстрый вопрос об использовании переменной в скрипте. Как мне использовать эту переменную для создания группы и папки, или мне нужна новая переменная? Пример: $Path = 'c:\TestShare' создает общий ресурс на диске c, но я хочу, чтобы группа AD использовала TestShare. Значит ли это, что мне нужно создать новую переменную, такую ​​как $ADGroup = 'TESTSHARE', или можно использовать ту же переменную $Path и каким-то образом удалить часть c: и сделать так, чтобы она отображалась заглавными буквами? - person Shane Johnson; 04.04.2016
comment
И чтобы вставить это в имя группы, это будет | New-ADGroup -Name "FS-$ADGROUP-RW" -SamAccountName "FS-$ADGROUP-RW" -GroupCategory Security -GroupScope Global -DisplayName "$ADGROUP Read-Write" -Path "CN=Security Groups,DC=Fabrikam,DC=Com" -Description "Members of this group have read-write access to $path" - person Shane Johnson; 04.04.2016
comment
В этом случае вам, вероятно, лучше использовать 2 переменные: 1 для родительского контейнера и другую для имени. $parent = "C:\"; $Name = "TESTSHARE"; Затем используйте их вместе для полного пути $path = "$($parent)$($Name)" - person CodedBeard; 07.04.2016
comment
По-видимому, у меня нет возможности добавить свой новый скрипт сюда, в комментарии, так как он слишком длинный... Я создал здесь новый поток: stackoverflow.com/ вопросы/36488395/ - person Shane Johnson; 08.04.2016