我需要在Windows 2008服务器上创build多个用户,并将密码到期值修改为“ 从不 ”。 这些将是本地(而不是AD)用户。 我可以使用“ networking用户 ”创build它们,它正在修改杀死我的通行证过期。 如果我做了一个“ net user username ”,它会列出这个字段和它的值,但是没有交换机(至less没有帮助文件引用的那个)来修改它,而且我在线看到的大多数解决scheme都build议安装第三方工具,但是这个解决scheme必须是Windows本地的(最好使用Powershell)。 任何帮助表示赞赏。
UPDATE
我说如果我想出在PowerShell中如何做到这一点,我会在这里发布,而且我是一个我的话。
Get-WmiObject -Class Win32_UserAccount -Filter "name = 'steve'" | Set-WmiInstance -Argument @{PasswordExpires = 0}
如何在Windows中执行Python脚本?
在Windows XP系统locking/解锁时触发事件
命令没有findshell脚本错误
这是一个布尔值,所以如果你想设置一个密码过期只是改变0到1.这对我来说很简单,我已经testing了这个方法更新其他WMI对象,它每次都工作。
读取指定的文件行,并从已经使用该文件的单词创build新的目录
脚本Audacity
将parameter passing给带有空格的Bash脚本中的命令
为Windows 7创build上下文菜单项,例如扫描方式
net accounts /maxpwage:unlimited
但是,这会将本地计算机上所有帐户的密码最长期限设置为无限制,而不仅限于您创建的新帐户。
如果你需要一个更好的控制水平(即为个人用户设置密码过期值),你需要一些更复杂的东西。 脚本专家共享 VBScript 的示例 ,该脚本将修改本地用户帐户,以便其密码永不过期:
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000 strDomainorWorkgroup = "Fabrikam" strComputer = "atl-win2k-01" strUser = "KenMeyer" Set objUser = Getobject("WinNT://" & strDomainorWorkgroup & "/" & _ strComputer & "/" & strUser & ",User") objUserFlags = objUser.Get("UserFlags") objPasswordExpirationFlag = objUserFlags OR ADS_UF_DONT_EXPIRE_PASSWD objUser.Put "userFlags",objPasswordExpirationFlag objUser.SetInfo
这将很容易修改,以适应任何用户的选择,甚至创建一个新的用户。
最后, 这是C#中的一个例子 ,您应该能够移植到PowerShell。 我不是一个PS专家,但考虑到它使用.NET框架,上面的代码应该给你一些想法。
从这个technet线程 。
$computer = $env:Computername $account = ([adsi]"WinNT://$computer/TestAccount") $account.PasswordExpired = 1 $account.psbase.commitchanges()
$ADS_UF_DONT_EXPIRE_PASSWD = 0x10000 $username = 'user' $user = [adsi] "WinNT://./$username" $user.UserFlags = $user.UserFlags[0] -bor $ADS_UF_DONT_EXPIRE_PASSWD $user.SetInfo()
ADS_USER_FLAG_ENUM枚举
$svrname = $env:computername $user = ([adsi]"WinNT://$svrname/Administrator") $user.userflags = 66049 $user.psbase.commitchanges()
userflags值确定为用户检查哪个tickBox – 这是一个基本的“密码不过期”值。 似乎无法弄清楚数字是如何汇集在一起的,下面的内容可能是有用的,但是根据这一点,我已经得到了保留的值,这是没有意义的。
http://www.selfadsi.org/ads-attributes/user-userAccountControl.htm
相反,我只是在测试框中启用了我需要的选项,并检索了值。 是最可靠的手段来确定你所需要我猜。
我采取了致命的百吉饼的解决方案,并没有奏效,直到我做了一个小小的改变。 见下文:
$svrname = $env:computername $user = ([adsi]"WinNT://$svrname/Administrator") $user.psbase.InvokeSet("userflags",66049) $user.psbase.commitchanges()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。