在PowerShell中更改用户属性

时间:2013-07-12 14:05:47

标签: powershell

我有一个创建用户的脚本并将密码和用户分配给一个组,但是我需要勾选2个复选框 - “用户无法更改密码”和“密码永不过期”,但对于我的生活我无法找到如何做到这一点。

到目前为止我的脚本是: -

# 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,但这不起作用。

您的建议表示赞赏

3 个答案:

答案 0 :(得分:8)

今天早上弄清楚了: -

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

答案 1 :(得分:4)

设置 useraccountcontrol 属性。您可以在此处找到useraccountcontrol标志列表:http://support.microsoft.com/kb/305144

添加所需标志的值(NORMAL_ACCOUNT = 512,PASSWD_CANT_CHANGE = 64,DONT_EXPIRE_PASSWORD = 65536),共计66112,并将属性设置为该数字:

$obUser.useraccountcontrol = 66112

顺便说一下,在设置了你想要设置的所有属性之后,你只需要在结束时调用 SetInfo()方法一次。

答案 2 :(得分: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()
相关问题