Windowsのユーザ一覧を取得するには(.Net)

.Net環境のプログラムからWindowsのユーザ一覧を取得するには DirectoryEntryクラスを使用します。

このクラスは,オンラインヘルプなどでは“ActiveDirectoryのノード・オブジェクトを参照する”と説明されていますが,実際には ActiveDirectoryを使用していないWorkGroup環境やDomain管理環境でも動作します。

DirectoryEntryクラスを使用して,ActiveDirectory で管理される各種のシステム情報を検索・取得することができます。
using System;
using System.Reflection;
using System.DirectoryServices;
using System.Collections.Generic;

namespace UserInfoTest {

class UserInfo {

// プロパティ値を格納するフィールド

public string Name = null;
public Byte[] objectSid = null;
public string Description = null;

/*
他に"User" エントリは以下のフィールドを
保持しています:
MaxStorage
PasswordAge
PasswordExpired
LoginHours
Description
BadPasswordAttempts
LastLogin
HomeDirectory
LoginScript
Profile
HomeDirDrive
Parameters
PrimaryGroupID
MinPasswordLength
MaxPasswordAge
MinPasswordAge
PasswordHistoryLength
AutoUnlockInterval
LockoutObservationInterval
MaxBadPasswordsAllowed
RasPermissions
objectSid
*/

// コンストラクタ

public UserInfo(DirectoryEntry userEntry) {

// フィールドと同じ名称のプロパティがあれば
// その内容をフィールドに設定します

Type myType = GetType();
foreach(FieldInfo fi in myType.GetFields()) {
PropertyValueCollection pvc
= userEntry.Properties[fi.Name];
if(pvc != null && pvc.Count > 0) {
fi.SetValue(this, pvc.Value);
}
}
}

// ユーザリストを取得します

public static List GetList(string dirpath) {

DirectoryEntry de = new DirectoryEntry(dirpath);
List userInfoList = new List();

foreach(DirectoryEntry node in de.Children) {
if(node.SchemaClassName == "User") {
userInfoList.Add(new UserInfo(node));
}
}
return userInfoList;
}

// 確認用

public static void Main(string[] args) {

// パスの指定方法は"DirectoryEntry.Path プロパティ"
// のオンラインヘルプを参照して下さい

string dirpath = "WinNT://hostname";

// 全ローカルユーザを表示します

foreach(UserInfo ui in UserInfo.GetList(dirpath)) {
Console.WriteLine(ui.Name + "," + ui.Description);
}
}

}
}


タグ:.net C#
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
rank← ランキングはこちらをクリック!

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。