ActiveDirectory でもローカルアカウントでもおおむね同様に記述できる。

using System;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.DirectoryServices.AccountManagement;

namespace AddDelUser
{
    class Program
    {
        static void Main(string[] args)
        {
            string mode = args[0];
            string name = args[1];

            Domain domain = Domain.GetCurrentDomain();
            PrincipalContext context = new PrincipalContext(ContextType.Domain);

            if (mode.Equals("add"))
            {
                UserPrincipal principal = new UserPrincipal(context);
                principal.Name = name;
                principal.UserPrincipalName = name + "@" + domain.Name;
                principal.SamAccountName = name;
                principal.Enabled = true;
                principal.SetPassword("hogehoge1*");
                principal.PasswordNeverExpires = true;
                principal.Save();
            }
            else
            {
                UserPrincipal principal = UserPrincipal.FindByIdentity(context, IdentityType.Name, name);
                principal.Delete();
            }
        }
    }
}

UserPrincipalName はユーザープリンシパル名(umezawa@umead.local 形式のアカウント名)、SamAccountName はSAMアカウント名(NT形式のアカウント名)、Name は「Active Directory ユーザーとコンピューター」で「名前」カラムに出てくる名前である。3つとも異なる名前を付けることができる(普通はそんなことしないと思うが)。GUI 操作でアカウントを追加する場合はユーザープリンシパル名を空にすることはできないが、プログラム的に追加する場合はユーザープリンシパル名は空にできるし、@ 以降を持たない名前も付けられる。SAMアカウント名は空にはできず、値を設定しないとランダムな値が使われ、null や空文字列を設定することはできない。

これだと現在のドメインのデフォルトの場所(「Active Directory ユーザーとコンピューター」でのドメインの下の “Users” フォルダ)に作られる。他のドメインに作りたい場合は new PrincipalContext(ContextType.Domain, "umesub.umead.local"); などとする。デフォルト以外の場所(DN)に作りたい場合は new PrincipalContext(ContextType.Domain, "umead.local", "OU=OtherGroup,DC=umead,DC=local"); などとする。

ローカルアカウントを操作したい場合は ContextType.Machine を使う。この場合、UserPrincipal クラスのいくつかのプロパティは使えない(UserPrincipalName とか)。ドメインの場合と同様に他のマシンのローカルアカウントを操作できるとドキュメントには書いてあるが、試してない。なお、ドメインコントローラ上で ContextType.Machine を使ってもエラーにはならずドメインアカウントを操作することになるが、やっぱり UserPrincipalName とかは使えない。

Trackback

no comment untill now

Add your comment now