ディレクトリ サービスのコマンド ライン ツール

ディレクトリ サービスのコマンド ライン ツール
ディレクトリ サービスのコマンドライン ツール群を使用すると、Active Directory にあるさまざまなオブジェクトの管理や、ディレクトリにある情報に対するクエリの実行が可能です。次の一覧は、各コマンド ラインツールの簡単な説明と機能を示しています。
dsadd - オブジェクトをディレクトリに追加します。詳細については、「Dsadd」を参照してください。
dsget - ディレクトリにあるオブジェクトのプロパティを表示します。詳細については、「Dsget」を参照してください。
dsmod - ディレクトリにある既存のオブジェクトの選択属性を変更します。詳細については、「Dsmod」を参照してください。
dsquery - 指定した検索条件に一致するオブジェクトをディレクトリ内で探します。詳細については、「Dsquery」を参照してください。
dsmove - オブジェクトを、現在の場所から新しい親の場所に移動します。詳細については、「Dsmove」を参照してください。
dsrm - ディレクトリにあるオブジェクト、またはオブジェクトの下にあるサブツリーすべてのいずれかまたは両方を削除します。詳細については、「Dsrm」を参照してください。

ActiveDirectoryの基本

piyo.comというドメイン内にhiyokoというAdministratorがいるとします。それを指したい場合は、
識別名(DN)
オプジェクトの位置を表すものの中で一番詳しい方法 CN=hiyoko、CN=Administrator、DC=piyo、DC=com
相対識別名(RDN)
ドメインまで検索かかってるときなどに使用 hiyoko
ユーザープリンシパル
ユーザーのログオン名。メールアドレスみたいなもん hiyoko@piyo.com
ダウンレベルログオン名
以前のWindowsで使用してたNetBIOS名と同じで、過去のWindowsと互換性を保たせるためにある piyo\hiyoko

超備忘録 - ka. 【 みんカラ 】 ブログ

SAMIDとCN以外はdsmod userで変更できるのでそっちの方が楽

                            • -

ADユーザのSAMIDとUPNを変更するスクリプト
Set objUser = GetObject("LDAP://CN=user1, OU=MyOU, DC=MyDomain, DC=com")
objUser.sAMAccountName = "user2"
objUser.userPrincipalName = "user2"
objUser.SetInfo

                            • -

ADユーザの名前(CN)を変更するスクリプト
Set oTargetOU = GetObject("LDAP://OU=MyOU,DC=MyDomain,DC=com")
oTargetOU.MoveHere "LDAP://CN=user1,OU=MyOU,DC=MyDomain,DC=com","CN=user2"

                            • -

ADの指定したOU以下の全ユーザのSAMIDを表示名と同一にするスクリプト
たまたま俺が表示名をSAMIDにしたかったからで、表示名じゃなくて別に姓でも名でもいいんだが…
Set oTargetOU = GetObject("LDAP://OU=MyOU,DC=MyDomain,DC=com")
oTargetOU.Filter = Array("user")
For each usr in oTargetOU
if instr(usr.sAMAccountName, "$") = 0 then
usr.put "sAMAccountName", usr.DisplayName
usr.setinfo
end if
Next

表示名に変な文字が入っててWindowsに怒られてもつまらんので、文字種のチェックする場合はこんな関数になるか?
わざわざ関数にしなくてもなんら問題ないけどね。
正規表現が使えると便利ですな。組織によってネーミングルールがあるだろうし。
Function fncStrChk(str1)
set oRegEx = New RegExp
oRegEx.Pattern = "[0-9A-Za-z]+"
If oRegEx.Test(str1) Then
fncStrChk=True
Else
fncStrChk=False
End If
End Function

そうすると?これを
For each usr in oTargetOU
if instr(usr.sAMAccountName, "$") = 0 then

こうすればイイんじゃね?超適当ですけどw とりあえずちゃんと動いた。
For each usr in oTargetOU
if fncStrChk(usr.DisplayName)=True And instr(usr.sAMAccountName, "$") = 0 then

コアとなる部分だけ書いたけど、実際はエラーチェックとかCSVファイルから引っ張ってきたりするコードが必要なことは言うまでもなく。

ADでのログオンユーザー名変更方法 - Windows Server Insider

setsid.vbs ***

Set args = Wscript.arguments
strDNph = args.item(0) & ”,ou=sales,dc=domain,dc=local”

Set objUser = GetObject(”LDAP://CN=” & StrDNph)
objUser.sAMAccountName = args.item(1)
objUser.userPrincipalName = args.item(1) & ”@domain.local”
objUser.SetInfo

バッチファイル ***

setsid.vbs yamadatarou 1111
setsid.vbs yamadahanako 2222
setsid.vbs satousaburou 3333
setsid.vbs kishibeshirou 4444