ローカルユーザのパスワードを無期限に設定するスクリプト

使いどころは微妙だけどちょっと仕事で必要だったのでこのへん参考につくってみた。

'#######################################
' パスワードを無期限に変更する
' 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使うのが吉。