ActiveDirectoryドメインへ参加+α

作成日時:2009/07/19


AutoDomainJoin AutoDomainJoin.wsf

ActiveDirectoryドメインへ参加する為のスクリプトです。

Active Directoryへの参加をする時は、ログオンするドメインユーザーをクライアントPCのAdministratorsに追加 する事が多い為、この処理も追加しており、更に、次回ログオンのユーザー名の入力が省略出来る様に、 レジストリの書き込みも追加してます。

ドメイン参加する際には、DNS等の名前解決の環境が必須となりますので、 あらかじめ設定しておくなどして下さい。
※ドメイン参加にはクライアント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);





inserted by FC2 system