[C#] Windowsでローカルユーザアカウントの作成・パスワード変更・削除・一覧の表示を行う


はじめに

今回は、Windows PC上にローカルユーザアカウントを作成する方法、作成したユーザアカウントのパスワードを変更する方法、作成したユーザアカウントを削除する方法についての備忘録です。

よく使うケースとしては、「ユーザを作成した結果に対して何か処理を行いたい」「ユーザアカウントの一覧をファイルに出力したい」などですかね。

コマンドプロンプトのnet userをコマンドを利用して操作することも可能ですが、ここではあえてC#での操作方法をまとめたいと思います。

ローカルユーザの作成

利用ライブラリ:System.DirectoryServices;

string username = "TestUser1";
string password = "12345!ABC";

try
{
    DirectoryEntry de = new DirectoryEntry($"WinNT://{Environment.MachineName},computer");
    DirectoryEntry newUser = de.Children.Add(username, "user");
    newUser.Invoke("SetPassword", new object[] { password });
    newUser.CommitChanges();

    // Groupに追加する
    DirectoryEntry grp = de.Children.Find("Guests", "group");
    if(grp != null)
    {
        grp.Invoke("Add", new object[] { newUser.Path.ToString() });
    }
}
catch(Exception e)
{
    Console.WriteLine(e.Message);
}

ローカルアカウントとして、「TestUser1」を作成し、「Guests」グループに割り当てる処理です。

ローカルユーザのパスワードを変更する

利用ライブラリ:System.DirectoryServices;

string username = "TestUser1";
string password = "12345!ABCDEF";

try
{
    DirectoryEntry de = new DirectoryEntry($"WinNT://{Environment.MachineName}/{username}");
    de.Invoke("SetPassword", password);
}
catch(Exception e)
{
    Console.WriteLine(e.Message);
}

ローカルユーザ一覧を取得する

利用ライブラリ:System.DirectoryServices;

try
{
    DirectoryEntry de = new DirectoryEntry($"WinNT://{Environment.MachineName}");
    foreach(DirectoryEntry node in directoryEntry.Children)
    {
        if(node.SchemaClassName == "User")
        {
            Console.WriteLine(node.Name);
        }
    }
}
catch(Exception e)
{
    Console.WriteLine(e.Message);
}

実行結果は下記の通りです。

Administrator
DefaultAccount
Guest
TestUser1

ローカルユーザを削除する

利用ライブラリ:System.DirectoryServices;

string username = "TestUser1"
try
{
    DirectoryEntry de = new DirectoryEntry($"WinNT://{Environment.MachineName}");
    DirectoryEntries users = de.Chidlren;
    DirectoryEntry user = users.Find(username);

    if(user != null)
    {
        users.Remove(user);
    }
}
catch(Exception e)
{
    Console.WriteLine(e.Message);
}

削除後に一覧を取得すると、正常に「TestUser1」が削除されていることが確認できます。

Administrator
DefaultAccount
Guest

最後に

基本的にユーザの追加や削除などといった操作はGUI上で作業することが一般的ですが、作業後に何かの処理を実施したいといった場合は、コードで組みツールとして提供できるようにしておくと、仕事の効率が上がると思われます。

是非、ご活用してみてください。