2013-07-12 14 views
6

Mam skrypt, który tworzy użytkownika i przypisuje hasło i użytkownika do grupy, ale muszę uzyskać zaznaczone 2 pola wyboru "Użytkownik nie może zmienić hasła" i "Hasło nigdy nie wygasa", ale dla życie moje nie mogę się dowiedzieć, jak to zrobić.Zmiana właściwości użytkownika w powershell

Mój skrypt do tej pory to: -

# Create User and add to IGNITEWEBUSERS Group 
$user = $domain 

# If more then 15 chars trim to just 15 chars 
$user = $user.substring(0, 15) 
$user = $user + "_web" 

# Generate Random Complex Password 
# Generate a password with 2 non-alphanumeric character. 
$Length = 10 
$Assembly = Add-Type -AssemblyName System.Web 
$RandomComplexPassword = [System.Web.Security.Membership]::GeneratePassword($Length,2) 
$password = $RandomComplexPassword 

$group = 'IGNITEWEBUSERS' 
$objOu = [ADSI]"WinNT://$computer" 
$objUser = $objOU.Create("User", $user) 
$objUser.setpassword($password) 
$objUser.SetInfo() 
$objUser.description = $domain + " IIS User" 
$objUser.SetInfo() 
$OBjOU = [ADSI]"WinNT://$computer/$group,group" 
$OBjOU.Add("WinNT://$computer/$user") 

To działa i robi to, co powinien zrobić, ale ktoś wie jak mogę ustawić te 2 pola wyboru? Różne wątki sugerują coś podobnego do Set-ADUser -CannotChangePassword:$true, ale nie używam Active Directory, a to nie działa.

Twoje rady cenione

Paul

Odpowiedz

8

Got to zorientowali się dziś rano: -

$objUser.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD 
+0

Niezupełnie jest oczywiste to! –

0

Korzystanie z WMI, aby uzyskać konto użytkownika:

# Use this filter so WMI doesn't spend forever talking to domain controllers. 
$user = Get-WmiObject Win32_UserAccount -Filter ("Domain='{0}' and Name='{1}'" -f $env:ComputerName,$Username) 
$user.PasswordChangeable = $false 
$user.PasswordExpires = $false 
$user.Put() 
+0

otrzymuję następujące błędy podczas dodawania że ... Własność „PasswordChangeable” nie można znaleźć na tym obiekcie; upewnij się, że istnieje i można go ustawiać. Nie można znaleźć właściwości 'PasswordExpires' dla tego obiektu; upewnij się, że istnieje i można go ustawiać. Nie można wywołać metody dla wyrażenia o wartości zerowej. + $ user.Put <<<<() –

+0

Przekaż '$ user' do' Get-Member' i zobacz jakie to ma właściwości, np. '$ user | Get-Member'. –

+0

Otrzymuję "żaden obiekt nie został określony do cmdlet get-member". Jak możesz prawdopodobnie powiedzieć, że jestem nowy na powershell, więc idź łatwo :) –

4

Ustaw userAccountControl nieruchomości. Możesz znaleźć listę flag userAccountControl tutaj: http://support.microsoft.com/kb/305144

dodać wartości flagi chcesz (NORMAL_ACCOUNT = 512, PASSWD_CANT_CHANGE = 64, DONT_EXPIRE_PASSWORD = 65536) o łącznej wartości 66112 i ustaw właściwość tego numeru:

$obUser.useraccountcontrol = 66112 

BTW, trzeba tylko zadzwonić do SetInfo() sposób raz na końcu, po ustawieniu wszystkich właściwości, które chcesz ustawić.

+0

Pojawia się następujący błąd: E: \ Domains \ ignite.flinthosts.co.uk \ wwwroot \ domains \ processes \ Domain> PowerShell.exe -noexit E: \ processes \ Domain \ createuser.ps1 Nie można ustawić właściwości Value dla Obiekt PSMemberInfo typu "System.Management.Automation.PSMethod". W E: \ processes \ Domain \ createuser.ps1: 24 char: 10 + $ objUser. <<<< userAccountControl = 66112 + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: PropertyAssignmentException –

+0

Got to zorientowali się dziś rano - $ objUser.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD –

Powiązane problemy