マイナーでもいいよね??

殆どVB系、でも .NET じゃない VB は知らないよん

目次

Blog 利用状況

書庫

日記カテゴリ

コンピュータ用のクラス(C#)

コンピュータを表すクラス 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のコードの方に書いてます。

投稿日時 : 2013年11月10日 12:51

タイトル
名前
URL
コメント