AutoDomainJoin.wsf
ActiveDirectoryドメインへ参加する為のスクリプトです。
Active Directoryへの参加をする時は、ログオンするドメインユーザーをクライアントPCのAdministratorsに追加 する事が多い為、この処理も追加しており、更に、次回ログオンのユーザー名の入力が省略出来る様に、 レジストリの書き込みも追加してます。
ドメイン参加する際には、DNS等の名前解決の環境が必須となりますので、
あらかじめ設定しておくなどして下さい。
※ドメイン参加にはクライアントPCの管理者権限が必要です。
※ドメイン参加にはクライアントPCの管理者権限が必要です。
ドメイン参加を行うには、Win32_ComputerSystemクラスを利用します。
このクラスにはJoinDomainOrWorkgroupというメッソドが用意されています。
このJoinDomainOrWorkgroupを使用してドメインへの参加を行います。
※このメソッドはWindowsXP移行でサポートされています。
Windows2000以前のOSで、ドメイン参加を自動化する場合にはNetdomというツールを利用します。
以下JoinDomainOrWorkgroupのメソッドです。
uint32 JoinDomainOrWorkgroup( [in] string Name, [in] string Password, [in] string UserName, [in, optional] string AccountOU, [in] uint32 FJoinOptions = 1 );
string Nameには、ドメイン名を設定します。
string Passwordは、UserNameに設定するユーザー名のパスワードを設定します。
string UserNameには、ドメイン参加を行うユーザー名を設定します。
string AccountOUは、コンピュータアカウントをどのOUに作成するかを設定します。
uint32 FJoinOptionsは、ドメイン参加へのオプション(というか機能)を設定します。
FJoinOptionsには、以下の通り設定が可能ですが、ここでは1と2を組み合わせて3のみ検証してます。
数値 | 説明 |
---|---|
1 (0x1) |
[原文] Default. Joins a computer to a domain. If this value is not specified, the join is a computer to a workgroup. [日本語訳] 通常はコンピュータをドメインに参加させます。 この値が指定されていない場合はWorkgroupへ切り替える場合のコンピュータです。 |
2 (0x2) |
[原文] Creates an account on a domain. [日本語訳] コンピュータアカウントをドメインに作成します。 |
4 (0x4) |
[原文] Deletes an account when a domain exists. [日本語訳] 未検証 |
16 (0x10) |
[原文] The join operation is part of an upgrade from Windows 98 or Windows 95 to Windows 2000 or Windows NT. [日本語訳] 未検証 |
32 (0x20) |
[原文] Allows a join to a new domain, even if the computer is already joined to a domain. [日本語訳] 未検証 |
64 (0x40) |
[原文] Performs an unsecured join. [日本語訳] 未検証 |
128 (0x80) |
[原文] The machine, not the user, password passed. This option is only valid for unsecure joins. [日本語訳] 未検証 |
256 (0x100) |
[原文] Writing SPN and DnsHostName attributes on the computer object should be deferred until the rename that follows the join. [日本語訳] 未検証 |
262144 (0x40000) |
[原文] The APIs were invoked during install. [日本語訳] 未検証 |
以下サンプルです。
Function inputUserName() Dim UserName UserName = InputBox("ユーザー名を入力して下さい。","ユーザー名の入力") inputUserName = UserName Exit Function End Function次回からログオンするユーザー名を入力します。
ここで入力されたユーザー名が、ローカルAdministratorsグループに追加され、 次回ログオンユーザーとしてレジストリに登録されます。
var userName = "administrator@example.local"; var passWord = "admin"; var domainName = "example.local"; var domainServerName = "dc01"; var joinDomainAccountName = inputUserName(); var createAccount = null; var domainNameNB = "example"; var oSh = WScript.CreateObject("WScript.Shell"); var oNet = WScript.CreateObject("WScript.Network"); var computerName = oNet.ComputerName; var localAdministrators = "WinNT://"+computerName+"/Administrators,group"; var joinDomainAccountServer = "WinNT://"+domainServerName+"/"+joinDomainAccountName; var oDomainUser = GetObject(localAdministrators); var oWMI = GetObject("winmgmts:\\\\"+computerName+"\\root\\cimv2"); var oCol = oWMI.InstancesOf("Win32_ComputerSystem"); var e = new Enumerator(oCol); var iConputerSystemClassCol = e.item(); var profilePath = oSh.ExpandEnvironmentStrings("%userprofile%"); var regKey = "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\"; var regUserID = regKey+"DefaultUserName"; var regDstlogonSv = regKey+"DefaultDomainName"; // // ドメイン参加 // iConputerSystemClassCol.JoinDomainOrWorkgroup(domainName,passWord,userName,createAccount,3); // // ローカル権限の追加 // oDomainUser.Add(joinDomainAccountServer); // // 次回ログオンユーザーとドメインをレジストリに書き込み // oSh.RegWrite(regUserID,joinDomainAccountName); oSh.RegWrite(regDstlogonSv,domainNameNB);