6

我需要在 Windows 2008 服务器上创建多个用户并将密码过期值修改为“从不”。这些将是本地(不是 AD)用户。我可以使用“ net user ”创建它们,它正在修改让我丧命的通行证到期。如果我执行“ net user username ”,它会列出该字段及其值,但没有开关(至少不是帮助文件引用的开关)来修改它,而且我在网上看到的大多数解决方案都建议安装 3rd 方工具,但是此解决方案必须是 Windows 原生的(最好使用 Powershell)。任何帮助表示赞赏。

更新

我说如果我知道如何在 Powershell 中做到这一点,我会在这里发布,我是一个信守诺言的人。

Get-WmiObject -Class Win32_UserAccount -Filter "name = 'steve'" | Set-WmiInstance -Argument @{PasswordExpires = 0}

这是一个布尔值,因此如果您想设置密码过期,只需将 0 更改为 1。这对我来说很简单,而且我已经测试了此方法更新其他 WMI 对象,并且每次都有效。

4

6 回答 6

6

简单的解决方案是创建一个发出以下命令的批处理文件:

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 框架,上面的代码应该会给你一些想法。

于 2011-01-28T04:41:56.673 回答
1

这个technet线程

$computer = $env:Computername
$account = ([adsi]"WinNT://$computer/TestAccount")
$account.PasswordExpired = 1
$account.psbase.commitchanges()

如果需要,您可以在计算机名称之前添加域。

于 2011-01-28T22:09:52.570 回答
1

为我工作:

WMIC USERACCOUNT WHERE "Name='ftpuser'" SET PasswordExpires=FALSE

用正确的用户名替换ftpuser

于 2019-11-19T15:23:13.650 回答
1

为本地用户设置密码永不过期。不要更改其他标志:

$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 枚举

于 2016-12-07T11:52:20.020 回答
0

其他解决方案对我不起作用,所以我将 Jason 的解决方案调整为:

$svrname = $env:computername
$user = ([adsi]"WinNT://$svrname/Administrator")
$user.userflags = 66049
$user.psbase.commitchanges()

userflags 值确定为用户检查哪些复选框 - 这是一个基本的“密码不会过期”值。似乎无法弄清楚这些数字是如何组合在一起的,下面可能会有用,但据此我启用了一个没有意义的保留值。

http://www.selfadsi.org/ads-attributes/user-userAccountControl.htm

相反,我只是在测试框中启用了我需要的选项并检索了该值。我猜是确定你需要什么的最可靠的方法。

于 2015-01-22T15:25:31.657 回答
0

我采用了 Deadly-Bagel 的解决方案,但没有奏效,直到我做了一个小改动。见下文:

$svrname = $env:computername
$user = ([adsi]"WinNT://$svrname/Administrator")
$user.psbase.InvokeSet("userflags", 66049)
$user.psbase.commitchanges()
于 2016-02-04T16:53:50.747 回答