ローカルユーザのパスワードを無期限に設定するスクリプト
使いどころは微妙だけどちょっと仕事で必要だったのでこのへん参考につくってみた。
'####################################### ' パスワードを無期限に変更する ' cscript passwd.vbs //Nologo account1 account2 ... '####################################### ' パスワード無期限フラグ Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000 ' コンピュータ名 Set objWshNetwork = CreateObject("WScript.Network") strComputerName = objWshNetwork.ComputerName ' 引数より対象アカウント Set objAccounts = Wscript.Arguments.Unnamed ' 対象アカウントに設定 If objAccounts.Count > 0 Then For intIndex = 0 To objAccounts.Count -1 strAccount = objAccounts.Item(intIndex) strADSIPath = "WinNT://" & strComputerName & "/" & strAccount If ExistObject(strADSIPath) Then WScript.Echo "ユーザ:" & strAccount & "のパスワードを無期限に設定します。" Set oUser = GetObject(strADSIPath) oUser.UserFlags = oUser.UserFlags OR ADS_UF_DONT_EXPIRE_PASSWD oUser.setinfo Set oUser = Nothing Else WScript.Echo "ユーザ:" & strAccount & "は存在しません。" End If Next End If WScript.Echo "完了しました。" Set objWshNetwork = Nothing '####################################### Function ExistObject(strADSIPath) Dim objTemp Dim boolExist On Error Resume Next Set objTemp = GetObject(strADSIPath) If Err.Number = 0 Then boolExist = True Else boolExist = False Err.Clear '初期化 End If ExistObject = boolExist Set objTemp = Nothing End Function
C:\> cscript passwd.vbs //Nologo ユーザ名1 ユーザ名2 ...
という感じで引数で指定したローカルユーザのパスワードを無期限に設定できます。
何が嬉しいかというと、大量の端末に複数の同じユーザ作って・・・という作業がいる時にとりあえず「net user」コマンドでユーザ&パスワードを作成するけど、この状態だと「パスワードを無期限に〜」のチェックが外れた状態で登録されてしまうので、
net user ユーザ名1 パスワード1 /add net user ユーザ名2 パスワード2 /add net user ユーザ名3 パスワード3 /add net user ユーザ名4 パスワード4 /add cscript passwd.vbs //Nologo ユーザ名1 ユーザ名2 ユーザ名3 ユーザ名4
上記のようなバッチファイルで幸せになれる。
もちろん追加するユーザがもっと大量になる場合はリソースキットのaddusers.exe使うのが吉。