Powershell: как установить разрешения AD для имени участника службы чтения / записи? - PullRequest
4 голосов
/ 11 ноября 2010

Как в Powershell установить права доступа AD для имени участника службы чтения / записи AD?

Обычно во время процесса сборки я использую ADSIedit для перехода к этому объекту, а затем перехожу через все вкладки безопасности, чтобы опуститься и поставить галочку рядом с:

  • Имя участника службы чтения
  • Написать имя участника службы

Но навигация по ADSIedit может занять много времени, поэтому я пытаюсь написать сценарий процесса. Если у меня есть привязка PowerShell LDAP к новому пользователю, как я могу использовать PowerShell для установки обоих этих свойств для этой учетной записи пользователя?

Ниже приведен взломанный фрагмент кода возможных частей моего скрипта установки:

$strDomain = "dc=my,dc=com"
$objDomain = [ADSI] "LDAP://" + strDomain 
$strSCCMSQLPW = Read-Host -assecurestring "Please enter a password for the " + $strSCCMSQL + " account: "
New-ADUser -SamAccountName $strSCCMSQL + -Name $strSCCMSQL -AccountPassword $strSCCMSQLPW -Enabled $true -Path $strUsersOU + "," + $strDomain -PasswordNeverExpires $true

Ответы [ 3 ]

7 голосов
/ 09 июня 2011

Вам необходимо добавить объект ActiveDirectoryAccessRule в ACL целевого объекта. Для установки свойств, специфичных для свойств, хитрость заключается в передаче schemaIDGUID атрибуту. Итак, сначала нам нужно найти schemaIDGUID из записи схемы Service-Principal-Name. В примере кода я статически ссылаюсь на Service-Principal-Name, еще лучше было бы поискать ldapDisplayname, чтобы найти запись, но я уверен, что вы можете разобраться с этим. В любом случае этот код должен выполнять работу:

Function Set-SpnPermission {
    param(
        [adsi]$TargetObject,
        [Security.Principal.IdentityReference]$Identity,
        [switch]$Write,
        [switch]$Read
    )
    if(!$write -and !$read){
        throw "Missing either -read or -write"
    }
    $rootDSE = [adsi]"LDAP://RootDSE"
    $schemaDN = $rootDSE.psbase.properties["schemaNamingContext"][0]
    $spnDN = "LDAP://CN=Service-Principal-Name,$schemaDN"
    $spnEntry = [adsi]$spnDN
    $guidArg=@("")
    $guidArg[0]=$spnEntry.psbase.Properties["schemaIDGUID"][0]
    $spnSecGuid = new-object GUID $guidArg

    if($read ){$adRight=[DirectoryServices.ActiveDirectoryRights]"ReadProperty" }
    if($write){$adRight=[DirectoryServices.ActiveDirectoryRights]"WriteProperty"}
    if($write -and $read){$adRight=[DirectoryServices.ActiveDirectoryRights]"readproperty,writeproperty"}
    $accessRuleArgs = $identity,$adRight,"Allow",$spnSecGuid,"None"
    $spnAce = new-object DirectoryServices.ActiveDirectoryAccessRule $accessRuleArgs
    $TargetObject.psbase.ObjectSecurity.AddAccessRule($spnAce)
    $TargetObject.psbase.CommitChanges()    
    return $spnAce
}

Примеры строк для вызова функции ...

$TargetObject = "LDAP://CN=User,OU=My User Org,DC=domain,DC=net"
$Identity = [security.principal.ntaccount]"domain\user"

Set-SpnPermission -TargetObject $TargetObject -Identity $Identity -write -read
1 голос
/ 01 марта 2012

Вот пример использования Quest для установки разрешений на атрибуты имени участника службы.

Сначала добавьте квест:

Add-PSSnapin Quest.ActiveRoles.ADManagement;

Установить разрешение (используя Add-QADPermission):

Get-QADUser UserName | Add-QADPermission -Account 'SELF' -Rights 'ReadProperty,WriteProperty' -Property 'servicePrincipalName' -ApplyTo 'ThisObjectOnly';
0 голосов
/ 28 января 2011

Вы можете использовать Команды AD Quest AD . В PowerShell это очень упрощает работу с разрешениями AD.

Прочтите этот блог , чтобы узнать, как добавить разрешения AD или даже скопировать разрешения AD.

Просто посмотрите Add-QADPermission, и он должен выполнить вашу работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...