トップ回答者
VBSでユーザ名から所属するOUを逆引きしたい

質問
-
回答
-
チャブーンです。
この件ですが、質問を読み直してみて、こちらが読み違えていたように思います。すみません。
言葉通りに理解した場合ですが、ユーザのOUはParentプロパティで所得できます。OUの名前だけ必要であればnameプロパティを最終的に取得することになります。LDAPによる認証が必要、という環境が具体的になんなのかわからないので、前回同様ユーザとパスワードを明示指定させます。
cscript ParentOU.vbs <IPアドレス>\<ユーザ名> <パスワード>
ParentOU.vbs
Set objParam = Wscript.Arguments strServer=left(objParam(0),instr(objParam(0),"\")-1) strUser=mid(objParam(0),instr(objParam(0),"\")+1) strOpassword=objParam(1) 'strNpassword=objParam(2) strFilter="(&(objectClass=user)(saMAccountName=" & strUser & "))" 'ドメインDNを指定します baseDN="DC=example,DC=com" Set objAdo=createObject("ADODB.Connection") objAdo.provider="ADsDsoObject" objAdo.properties("User ID")=strUser objAdo.properties("Password")=strOpassword objAdo.properties("Encrypt Password")=True objAdo.Open "dssearch" Set objRecordSet=objAdo.execute("<LDAP://" & strServer & "/" & baseDN & ">;" & strFilter & ";ADsPath;subtree") strADsPath=objRecordSet.Fields("ADsPath").value Set objDS=GetObject("LDAP:") Set objUser=objDS.OpenDSObject(strADsPath,strUser,strOpassword,1) objUser.GetInfo strParent=objUser.Parent Set objOU=objDS.OpenDSObject(strParent,strUser,strOpassword,1) Wscript.echo strUser & " の親 OU は " & (objOU.Get("name")) & " です。 "
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP, Moderator 2015年5月22日 1:41
- 回答の候補に設定 佐伯玲 2015年5月25日 2:31
- 回答としてマーク 佐伯玲 2015年5月29日 6:11
すべての返信
-
チャブーンです。
この件ですが、実質以下のスレッドの続編ですよね。
で、答えの方ですがユーザの所属OUを直接確認する必要はなく、ドメイン内で「該当するユーザー名」で検索をかけ、その位置パス(ADsPath)を検出し、パスワード変更をかけます。コマンドとしての書式は以前と同じになります。
cscript chgpass.vbs <IPアドレス\ユーザ名> <古いパスワード> <新しいパスワード>
chgpass.vbs
Set objParam = Wscript.Arguments strServer=left(objParam(0),instr(objParam(0),"\")-1) strUser=mid(objParam(0),instr(objParam(0),"\")+1) strOpassword=objParam(1) strNpassword=objParam(2) strFilter="(&(objectClass=user)(saMAccountName=" & strUser & "))" 'ドメインDNを指定します baseDN="DC=example,DC=com" Set objAdo=createObject("ADODB.Connection") objAdo.provider="ADsDsoObject" objAdo.properties("User ID")=strUser objAdo.properties("Password")=strOpassword objAdo.properties("Encrypt Password")=True objAdo.Open "dssearch" Set objRecordSet=objAdo.execute("<LDAP://" & strServer & "/" & baseDN & ">;" & strFilter & ";ADsPath;subtree") strADsPath=objRecordSet.Fields("ADsPath").value Set objDS=GetObject("LDAP:") Set objUser=objDS.OpenDSObject(strADsPath,strUser,strOpassword,1) objUser.changePassword strOpassword,strNpassword
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 回答の候補に設定 佐伯玲 2015年5月21日 1:10
- 回答の候補の設定解除 チャブーンMVP, Moderator 2015年5月22日 1:39
-
チャブーンです。
この件ですが、質問を読み直してみて、こちらが読み違えていたように思います。すみません。
言葉通りに理解した場合ですが、ユーザのOUはParentプロパティで所得できます。OUの名前だけ必要であればnameプロパティを最終的に取得することになります。LDAPによる認証が必要、という環境が具体的になんなのかわからないので、前回同様ユーザとパスワードを明示指定させます。
cscript ParentOU.vbs <IPアドレス>\<ユーザ名> <パスワード>
ParentOU.vbs
Set objParam = Wscript.Arguments strServer=left(objParam(0),instr(objParam(0),"\")-1) strUser=mid(objParam(0),instr(objParam(0),"\")+1) strOpassword=objParam(1) 'strNpassword=objParam(2) strFilter="(&(objectClass=user)(saMAccountName=" & strUser & "))" 'ドメインDNを指定します baseDN="DC=example,DC=com" Set objAdo=createObject("ADODB.Connection") objAdo.provider="ADsDsoObject" objAdo.properties("User ID")=strUser objAdo.properties("Password")=strOpassword objAdo.properties("Encrypt Password")=True objAdo.Open "dssearch" Set objRecordSet=objAdo.execute("<LDAP://" & strServer & "/" & baseDN & ">;" & strFilter & ";ADsPath;subtree") strADsPath=objRecordSet.Fields("ADsPath").value Set objDS=GetObject("LDAP:") Set objUser=objDS.OpenDSObject(strADsPath,strUser,strOpassword,1) objUser.GetInfo strParent=objUser.Parent Set objOU=objDS.OpenDSObject(strParent,strUser,strOpassword,1) Wscript.echo strUser & " の親 OU は " & (objOU.Get("name")) & " です。 "
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP, Moderator 2015年5月22日 1:41
- 回答の候補に設定 佐伯玲 2015年5月25日 2:31
- 回答としてマーク 佐伯玲 2015年5月29日 6:11