Передача альтернативных учетных данных командам ADSI в Powershell - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь назначить разрешения для AD OU с помощью сценария PowerShell, который должен создать новый объект типа System.Security.Principal.NTAccount и System.DirectoryServices.ActiveDirectoryAccessRule. Код, который у меня сейчас есть, работает без альтернативных учетных данных, но теперь мне нужно используйте тот же код с альтернативными учетными данными.

Рабочий код без альтернативных учетных данных:

$ADSI = [ADSI]"LDAP://$OUPath"

$NTAccount = New-Object System.Security.Principal.NTAccount($ClientGroupED)

$IdentityReference = $NTAccount.Translate([System.Security.Principal.SecurityIdentifier])

$ActiveDirectoryRights = [System.DirectoryServices.ActiveDirectoryRights] "GenericAll"

$AccessControlType = [System.Security.AccessControl.AccessControlType] "Deny"

$Inherit = [System.DirectoryServices.ActiveDirectorySecurityInheritance] "All"  #All, Children, Descendents, None, SelfAndChildren

$ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($IdentityReference,$ActiveDirectoryRights,$AccessControlType,$Inherit)

$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)

$ADSI.psbase.commitchanges()

Я попытался передать альтернативные учетные данные, используя -Credential $Cred, а также передал -ArgumentList $Cred при вызове New-Object ничего не работает. Нужна помощь в этом вопросе.

1 Ответ

0 голосов
/ 06 мая 2020

Единственное место, где вы на самом деле разговариваете с AD, - $ADSI.psbase.commitchanges(). Таким образом, единственное место, где вам нужно установить учетные данные, - это когда вы создаете $ADSI.

Ускоритель типа [ADSI] - это просто ярлык для создания объекта DirectoryEntry. DirectoryEntry имеет конструктор , который принимает учетные данные , но для его использования вы больше не можете использовать ускоритель типов. Вам понадобится пользователь New-Object, например:

$ADSI = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$OUPath", "username", "password")

Просто замените username и password учетными данными, которые имеют разрешение делать то, что вы делаете.

Если вы хотите, чтобы сценарий вызывал Get-Credential и использовал любые учетные данные, которые вводит пользователь, вы можете использовать решение здесь .

Примечание: вам не нужно использовать psbase в последних двух строках. Можете, если хотите, но функциональной разницы это не имеет. Можно обойтись без:

$ADSI.ObjectSecurity.SetAccessRule($ACE)

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