.NET TIPS

ユーザーのフル・ネーム(表示名)を取得するには?[C#、VB]

デジタルアドバンテージ 遠藤 孝信
2007/09/06

 Windowsのユーザーはユーザー名(ログオン時に使用されるアカウント名)により識別されるが、ユーザー情報の一部としてそのユーザーの「フル・ネーム」を設定することができる。これは「表示名」とも呼ばれ、例えばWindows XPなどでは、[スタート]メニューの一番上の部分でユーザーの名前*を表示するのに使用されている。

* フル・ネームが設定されていない場合には[スタート]メニューにもユーザー名が表示される。フル・ネームの設定内容は「net user ユーザー名」や「net user ユーザー名 /domain」などのコマンドにより「フル ネーム」の項目から確認できる(前者はローカル、後者はドメインの情報をそれぞれ表示)。

 本稿では、このフル・ネーム(表示名)をプログラムで取得する方法について解説する。

ユーザー名/ドメイン名の取得

 フル・ネームを取得するには、ユーザー名とそのユーザーが登録されているドメインの名前(PCがドメインに参加していない場合にはコンピュータ名)がまず必要になる。

 これらについては取得のためのプロパティがEnvironmentクラス(System名前空間)に用意されており、現在のユーザーのユーザー名は、EnvironmentクラスのUserNameプロパティから取得できる。

 同様に、そのユーザーが属するドメインの名前(PCがドメインに参加していない場合にはコンピュータ名)は、EnvironmentクラスのUserDomainNameプロパティから取得できる。

 以下にその記述例を示す。

string uName  = Environment.UserName;
string domain = Environment.UserDomainName;
Dim uName As String  = Environment.UserName
Dim domain As String = Environment.UserDomainName
Environmentクラスによるユーザー名/ドメイン名の取得(上:C#、下:VB)

フル・ネーム(表示名)の取得

 フル・ネームに関しては、それを直接取得できるプロパティなどは用意されておらず、ユーザー名/ドメイン名を用いてActive Directoryに問い合わせる必要がある(ただし、必ずしもActive Directoryに参加している必要はない)。

 Active Directoryへの問い合わせには、ADSI(Active Directory Service Interfaces)という仕組みがWindowsに用意されているが、.NET Frameworkのクラス・ライブラリでは、DirectoryEntryクラス(System.DirectoryServices名前空間)がこのADSIを実装している。

 以下のコードはドメイン「myDomain」のユーザー「myName」のフル・ネームを取得するためのコード例である。

string path = "WinNT://myDomain/myName";

DirectoryEntry dirEnt = new DirectoryEntry(path)
string dName = dirEnt.Properties["FullName"].Value.ToString();
Dim path As String = "WinNT://myDomain/myName"

Dim dirEnt As DirectoryEntry = New DirectoryEntry(path)
Dim dName As String = dirEnt.Properties("FullName").Value.ToString()
DirectoryEntryクラスによるユーザーのフル・ネームの取得(上:C#、下:VB)
ここではドメイン「myDomain」のユーザー「myName」のフル・ネームを取得している。

 Active Directoryはツリー構造で情報を格納しており、DirectoryEntryクラスでは特定のエントリ(ノード)の位置を「WinNT://〜」の形式で指定できる。各エントリはプロパティのセットであり、Propertiesプロパティを使って各プロパティの値を取得できる。

フル・ネームを表示するサンプル・プログラム

 次のコードは、上記2つの手順を組み合わせることにより、現在のユーザーのフル・ネームを表示するサンプル・プログラムである。

// displayname.cs

using System;
using System.DirectoryServices;

class DisplayName {
  static void Main() {

    string domain = Environment.UserDomainName; // ドメイン名
    string uName  = Environment.UserName;       // ユーザー名

    string path = "WinNT://" + domain + "/" + uName;

    string dName;
    using (DirectoryEntry dirEnt = new DirectoryEntry(path))
    {
      // フル・ネーム
      dName = dirEnt.Properties["FullName"].Value.ToString();
    }

    Console.WriteLine(domain); // 出力例:D-ADVANTAGE
    Console.WriteLine(uName);  // 出力例:taka-e
    Console.WriteLine(dName);  // 出力例:ENDOH, Takanobu
  }
}

// コンパイル方法:csc displayname.cs
ドメイン名、ユーザー名、表示名を表示するC#のサンプル・プログラム(displayname.cs)

' displayname.vb

Imports System
Imports System.DirectoryServices

Class DisplayName
  Shared Sub Main()

    Dim domain As String = Environment.UserDomainName ' ドメイン名
    Dim uName  As String = Environment.UserName       ' ユーザー名

    Dim path As String = "WinNT://" + domain + "/" + uName

    Dim dName As String
    Using dirEnt As DirectoryEntry = new DirectoryEntry(path)
      ' フル・ネーム
      dName = dirEnt.Properties("FullName").Value.ToString()
    End Using

    Console.WriteLine(domain) ' 出力例:D-ADVANTAGE
    Console.WriteLine(uName)  ' 出力例:taka-e
    Console.WriteLine(dName)  ' 出力例:ENDOH, Takanobu
  End Sub
End Class

' コンパイル方法:vbc displayname.vb
ドメイン名、ユーザー名、表示名を表示するVBのサンプル・プログラム(displayname.vb)

 このサンプル・プログラムは、ドメイン名/ドメイン・ユーザー名/フル・ネーム、あるいはドメインに参加していない場合には、コンピュータ名/ローカル・ユーザー名/フル・ネームを表示する。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用ライブラリ:Environmentクラス(System名前空間)
使用ライブラリ:DirectoryEntryクラス(System.DirectoryServices名前空間)

この記事と関連性の高い別の.NET TIPS
[ASP.NET]メンバシップAPIでユーザー情報の編集を行うには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH