Как мне написать скрипт для изменения значений срока действия пароля для пользователей на Windows Server? - PullRequest
6 голосов
/ 28 января 2011

Мне нужно создать несколько пользователей на серверах Windows 2008 и изменить значение срока действия пароля на « Никогда ». Это будут локальные (не AD) пользователи. Я могу создать их, используя " net user ", это изменяет срок действия пароля, который убивает меня. Если я выполняю « net username », в нем перечисляются поле и его значение, но нет переключателя (по крайней мере, того, на который ссылается файл справки), чтобы изменить его, и большинство решений, которые я видел онлайн предложил установить сторонние инструменты, однако это решение должно быть встроено в Windows (в идеале, с использованием Powershell). Любая помощь приветствуется.

ОБНОВЛЕНИЕ

Я сказал, что если бы я понял, как это сделать в Powershell, я бы опубликовал это здесь, и я человек своего слова.

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

Это логическое значение, поэтому, если вы хотите установить срок действия пароля, просто измените 0 на 1. Это прекрасно для меня в своей простоте, и я протестировал этот метод, обновляя другие объекты WMI, и он работает каждый раз.

Ответы [ 5 ]

6 голосов
/ 28 января 2011

Простым решением является создание командного файла, который выполняет следующую команду:

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 Framework, приведенный выше код должен дать вам некоторые идеи.

1 голос
/ 07 декабря 2016

Установить пароль никогда не истекает для локального пользователя.Не изменяйте другие флаги:

$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 перечисление

1 голос
/ 29 января 2011

С эта нить technet .

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

При необходимости вы можете добавить домен перед именем компьютера.

0 голосов
/ 04 февраля 2016

Я принял решение Deadly-Bagel, и оно не сработало, пока я не сделал небольшое изменение. Смотрите ниже:

$svrname = $env:computername
$user = ([adsi]"WinNT://$svrname/Administrator")
$user.psbase.InvokeSet("userflags", 66049)
$user.psbase.commitchanges()
0 голосов
/ 22 января 2015

Другие решения не работали для меня, поэтому я подправил решение Джейсона:

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

Значение userflags определяет, какие флажки проверяются для пользователя - это базовое значение «пароль не истекает». Кажется, не получается выяснить, как соотносятся числа, ниже может быть полезно, но в соответствии с этим у меня включено зарезервированное значение, которое не имеет смысла.

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

Вместо этого я просто включил нужные параметры в тестовом окне и получил значение. Это самый надежный способ определить, что вам нужно, я думаю.

...