「ユーザは次回ログオン時にパスワード変更が必要」のオプションを使い使用者にパスワードを設定してもらおうと思っています。

対象ユーザー毎に設定したいので、
スクリプト等で、外部テキスト(TXT)からユーザーを読み込み対象ユーザーに設定したいと思っております。
環境は、
Windows2003Server Active Directory
対象ユーザーのOUは複数,ADSI等はインストールできません。

再質問で申し訳ございません。
300ptずつ配分しますので、ソース付で回答願います。

回答の条件
  • 1人2回まで
  • 登録:2008/04/04 23:45:39
  • 終了:2008/04/06 00:12:17

回答(2件)

id:memo77 No.1

memo77回答回数238ベストアンサー獲得回数202008/04/05 12:43:47

ポイント500pt

回答がつかないようなので、自分の勉強もかねて書いてみました。

2,3ユーザーでしかテストしていないので、使用は自己責任で。

'【書換必須】ユーザーを列挙したファイルパス。ユーザーごとに改行。
strPath = "C:\Documents and Settings\Administrator\デスクトップ\Users.txt"
'【書換必須】ドメインのLDAP指定
strLDAP = "LDAP://dc=example,dc=co,dc=jp"

Const ADS_SCOPE_SUBTREE = 2

Set fso = CreateObject( "Scripting.FileSystemObject" )
Set ts = fso.OpenTextFile( strPath, 1 )
    lines = Split( ts.ReadAll, vbCrLf )
    ts.Close

Set dicUsers = CreateObject( "Scripting.Dictionary" )
For i = 0 to Ubound(lines) - 1
    dicUsers.Add lines(i) , 0
Next

Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

Set objCommand =   CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
    objCommand.CommandText = "SELECT distinguishedName,CN FROM '" & strLDAP & "' WHERE objectCategory='user'"

Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

Do Until objRecordSet.EOF
    strDN = objRecordSet.Fields("distinguishedName").Value
    IF dicUsers.Exists(objRecordSet.Fields("CN").Value) Then
        Set objUser = GetObject("LDAP://" & strDN)
        '最初にかならず狙ったユーザーが引っかかるかテスト
        MsgBox objUser.Name
    '大丈夫だと思ったら、MsgBoxをコメントアウトして、下記2行のコメントアウトを外す
        'objUser.pwdLastSet = 0
        'objUser.SetInfo
    End If
    objRecordSet.MoveNext
Loop

MsgBox "Finish!"

http://www31.atwiki.jp/memo77/pages/27.html

id:anim130M

望みどおりのソースです。

ありがとうございます。

2008/04/06 00:07:38
id:haruo-31 No.2

haruo-31回答回数80ベストアンサー獲得回数102008/04/05 12:59:55

ポイント300pt

ADSIはデフォルトで使えます。インストールする必要はありません。

Windows2000以降、WMIとADSIはWindowsに標準で実装されているインタフェースです。

前回提示したコードを、自分のユーザに対して実行してみてください。

strName="EzADUser"

というのを、

strName="あなたのユーザ名"

とすると、あなたのアカウントのパスワードが期限切れになるはずです。

http://q.hatena.ne.jp/1206875453

VBSに関してもし不明点があれば、コメントを開放して質問いただければ何かしら助言することはできると思います。

id:anim130M

ありがとうございます。

ADSIに関しては、上司からの承認が出なかったので、

今回は保留とさせていただきました。

2008/04/06 00:09:07
  • id:memo77
    動作したならよかったです(^-^)

    はてなをあまり使ったことがない方かもしれないので、ちょっとアドバイス。
    いい回答だと思ったときはポイント配分時に「いるか」をつけてあげると回答者が喜びますよー。
  • id:haruo-31
    回答にポイントつけていただいてありがとうございます。m(__)m

    負けず嫌いなのでひとつだけ言わせていただきたいのですが、
    memo77さんのスクリプトで使われている、
    LDAP://…とselect … ADsDSOObjectの辺りはADSIの機能です。

    WMIとADSIは知っていて損はない(というか使わないと弄れないところが一杯ある)ので、
    勉強されているほうが良いですよ。
    多分ちゃんと上司に説明できるスキルがつけば、OKも出ると思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません