2013-07-12 102 views
6

我有一個腳本創建用戶並將密碼和用戶分配給一個組,但我需要打勾2個複選框 - '用戶不能更改密碼'和'密碼永不過期',但對於我的生活我無法找到如何做到這一點。在PowerShell中更改用戶屬性

我的腳本到目前爲止是這樣的: -

# 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") 

這一工程,並做它應該做什麼,但有誰知道我可以設置這些2個複選框? 各種線程提示類似於Set-ADUser -CannotChangePassword:$true但我沒有使用Active Directory,這不起作用。

你的建議讚賞

保羅

回答

8

得到它今天早晨想通了: -

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

不完全明顯的是它! –

0

使用WMI來獲取用戶帳戶:

# 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

我加入時,得到以下的錯誤,... 住宅「PasswordChangeable」不能在該物體上找到;確保它存在並可設置。 無法在此對象上找到屬性'PasswordExpires';確保它存在並可設置。 您無法在空值表達式上調用方法。 + $ user.Put <<<<() –

+0

將'$ user'傳遞給'Get-Member'並查看它具有哪些屬性,例如'$ user | GET-Member'。 –

+0

我得到'沒有對象被指定給get-member cmdlet'。正如你可能會告訴我,我是非常新的PowerShell,所以去容易:) –

4

設置的UserAccountControl財產。你可以找到UserAccountControl標誌這裏的列表:http://support.microsoft.com/kb/305144

共計66112添加你想要的標誌(NORMAL_ACCOUNT = 512,PASSWD_CANT_CHANGE = 64,DONT_EXPIRE_PASSWORD = 65536)的值,並設置屬性爲這個數字:

$obUser.useraccountcontrol = 66112 

順便說一句,你只需要在最後調用SetInfo()方法一次,將所有你想要設置的屬性之後。

+0

我收到以下錯誤:E:\ Domains \ ignite.flinthosts.co.uk \ wwwroot \ domains \ processes \ Domain> PowerShell.exe -noexit E:\ processes \ Domain \ createuser.ps1 無法將Value屬性設置爲類型爲「System.Management.Automation.PSMethod」的PSMemberInfo對象。 在E:\ processes \ Domain \ createuser.ps1:24 char:10 + $ objUser。 <<<<的UserAccountControl = 66112 + CategoryInfo:InvalidOperation:(:) [],RuntimeException的 + FullyQualifiedErrorId:PropertyAssignmentException –

+0

明白了這個早晨想通了 - $ objUser.UserFlags = 64 + 65536#ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD –