2015-04-01 3 views
0

Я пишу сценарий Powershell для создания учетной записи пользователя в Active Directory, и я хочу, чтобы использовать учетные данные, чтобы сделать это, поэтому я использую .NETУстановка «UserAccountControl» с помощью Powershell и .NET

$objDirectoryEntry = New-Object System.DirectoryServices.DirectoryEntry ($OU,$($Credential.UserName),$($Credential.GetNetworkCredential().password)) 
$Account = $objDirectoryEntry.psbase.get_children().add("CN="+$AccountName,"User") 
$Account.psbase.InvokeSet("sAMAccountName",$sAMAccountName) 
$Account.psbase.invokeset("DisplayName", $Displayname) 
$Account.psbase.invokeset("Description", $Description) 
$Account.psbase.CommitChanges() 

представляется невозможным установить параметр печально известного «UserAccountControl»

$Account.psbase.invokeset(“userAccountControl”, 66048) #fails 
$Account.psbase.invokeset(“userAccountControl”, 0x10200) #fails 
$Account.psbase.invokeset(“userAccountControl”, 0x2) #fails 

с другой стороны, используя обертку ADSI работает отлично.

$objADSI = [ADSI]$AdminOU 
$objAccount = $objADSI.create("User","CN="+$AccountName) 

# Create the account 
$objAccount.put("SamAccountName", $AccountName) 
$objAccount.put("DisplayName", $Displayname) 
$objAccount.put("Description", $Description) 
$objAccount.SetInfo() 

# set password 
$objAccount.SetPassword($AdminAccountPassword) 
$objAccount.SetInfo() 

# set the userAccountControl 
$objAccount.put(“userAccountControl”, 66048) 
$objAccount.SetInfo() 

Но не удается заставить метод обертки ADSI работать под разными учетными данными.

Проводят слишком много времени, ударив головой об этом, только другие методы, которые я могу думать о том, чтобы начать экономить метод ADSI на внешний сценарий и вызвать его, используя учетные данные, безусловно, Theres способ,

+0

Это дает вам сообщение об ошибке, когда он не работает? и вы устали устанавливать его в фактическое значение int: '512 (активный) 514 (отключен) и т. д. –

+0

Привет, Да, спасибо за ответ – beehaus

+0

Да, вот команды, которые я пробовал, и ошибки, полученные ниже $ ServerAccount. psbase.invokeset («userAccountControl», 512) $ ServerAccount.psbase.CommitChanges() Вызов «CommitChanges» с использованием аргументов «0»: «Сервер не хочет обрабатывать запрос – beehaus

ответ

2

I нашел простой способ получить учетные данные в оболочке ADSI powershell.

$objADSI = [ADSI]$LDAPPath 
$objADSI.PsBase.Username = $UserName 
$objADSI.PsBase.Password = $Password 

Использование PSBase разоблачить скрытые атрибуты System.DirectoryServices.DirectoryEntry объекта .NET

Вы можете вернуться к обычным методам Powershell оберток ADSI и все работает хорошо.

Смежные вопросы