コンピュータを表すクラス Computer クラスのC#のコードです。
[DataObject()]
public sealed class Computer : DomainObject
{
#region プライベートフィールド
private readonly string _fullName, _role, _os, _osVer, _osSP, _site;
#endregion
#region インターナルコンストラクタ
//DirectoryEntry を指定して Computer クラスの新しいインスタンスを初期化します。
internal Computer(DirectoryEntry entry)
: base(entry)
{
entry.Invoke("GetInfoEx", new object[] { "msDS-isGC", "msDS-SiteName" }, 0);
var p = entry.Properties;
_fullName = (string)p["dNSHostName"].Value;
_role = GetRole(); //役割を取得
_os = (string)p["operatingSystem"].Value;
_osVer = (string)p["operatingSystemVersion"].Value;
_osSP = (string)p["operatingSystemServicePack"].Value;
_site = (string)p["msDS-SiteName"].Value;
}
#endregion
#region パブリックプロパティ
//DNS 名を取得します。
public string FullName
{
get
{
return _fullName;
}
}
//OS を取得します。
public string OperatingSystem
{
get
{
return _os;
}
}
//OS のサービスパックを取得します。
public string OperatingSystemServicePack
{
get
{
return _osSP;
}
}
//OS のバージョンを取得します。
public string OperatingSystemVersion
{
get
{
return _osVer;
}
}
//プライマリグループ ID を取得します。
public int PrimaryGroupId
{
get
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
return Convert.ToInt32(base.Entry.Properties["primaryGroupID"].Value);
}
}
//役割を取得します。
public string Role
{
get
{
return _role;
}
}
//サイトを取得します。
public string Site
{
get
{
return _site;
}
}
#endregion
#region パブリックメソッド
//指定した名前のコンピュータを検索します。このメソッドはデータバインド用です。
[DataObjectMethod(DataObjectMethodType.Select)]
public static Computer FindByName(string name)
{
return (Computer)DirectoryAccess.FindDirectoryObject(name, CategoryType.Computer);
}
//所属するグループを取得します。
public ReadOnlyCollection<string> GetBelongGroups(IEnumerable<DomainGroup> groups)
{
if (groups == null)
{
throw new ArgumentNullException("groups", "groups が null です。");
}
var belongGroups = groups.Where(
group => group.Native.IsMember(base.Entry.Path)).Select(group => group.Name).ToList();
belongGroups.Add(DirectoryAccess.GroupTokens[this.PrimaryGroupId]);
belongGroups.Sort();
return belongGroups.AsReadOnly();
}
//指定した名前のコンピュータの所属するグループを取得します。このメソッドはデータバインド用です。
[DataObjectMethod(DataObjectMethodType.Select)]
public static ReadOnlyCollection<string> GetBelongGroups(string name)
{
var pc = FindByName(name); //コンピュータを検索
var groups = DirectoryAccess.GetGroups<DomainGroup>(); //グループを取得
return pc.GetBelongGroups(groups); //所属するグループを取得
}
//コンピュータの一覧を取得します。このメソッドはデータバインド用です。
[DataObjectMethod(DataObjectMethodType.Select)]
public static IList<Computer> GetComputers()
{
return DirectoryAccess.GetComputers(); //コンピュータを取得
}
#endregion
#region プライベートメソッド
//役割を取得します。
private string GetRole()
{
var gc = base.Entry.Properties["msDS-isGC"].Value;
if (gc == null)
{
return "ワークステーションまたはサーバー";
}
return Convert.ToBoolean(gc) ? "グローバル カタログ" : "ドメイン コントローラー";
}
#endregion
}
説明はVBのコードの方に書いてます。