11

次の関数は、現在の Windows ユーザーの名前を domain\username 形式で返すことを知っています。

Convert.ToString( WindowsIdentity.GetCurrent().Name );

username@domainしかし、ユーザーの名前を形式で取得するにはどうすればよいですか?

編集:

返信したすべての人が同じ基本的な考えを持っているので、私はこの編集で返信しています。

私が理解していることから、domain\username形式から名前を解析し、それをusername@domain安全または推奨されていないものとして構築することはできません。これは、2 つのドメイン名が異なる形式で同じであるという保証がないためです。例えば、私の勤めている会社ではフォーマットのdomain部分は部門別ですが、会社では会社名です。これは、DNS ルックアップが必要な種類のものです。domain\usernameusername@domain

この DNS ルックアップを行う API があることを期待していました。この情報を元の質問に入れるべきだったと思います。ごめん。

4

7 に答える 7

12

このようなものはうまくいくはずです...

string[] temp = Convert.ToString(WindowsIdentity.GetCurrent().Name).Split('\\');
string userName = temp[1] + "@" + temp[0];
于 2012-08-28T20:13:45.003 に答える
4
var input =  WindowsIdentity.GetCurrent().Name ;
string[] tab = input.Split('\\');
var result = tab[1] + "@" +  tab[0];
于 2012-08-28T20:11:59.283 に答える
4

使用する

System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName

これは、現在のユーザーの UPN を返します。System.DirectoryServices.AccountManagement への参照が必要です。

于 2015-09-23T16:28:10.680 に答える
4

名前を形式で取得して解析するすべてのコードがDomain\user name、すべての状況で機能するとは限りません。答えは、Active Directory を呼び出してユーザー プリンシパル名を取得する必要があるということです。多くの警察署は、警官が車に乗っていないときに盗難にあった場合に備えて、ラップトップにディレクトリをインストールしていないため、デスクトップに Active Directory がインストールされていることに頼ることはできません。(パトカーからコンピューターを盗む勇気について話してください!)

私たちは、私たちの状況に対する独自の解決策を考え出しました。Domain\user nameユーザー名をデータベースに形式で保存します。プログラムが起動すると、現在の Windows ユーザー名 (同じ形式) がデータベースにあるかどうかがチェックされます。そうである場合、プログラムはそのユーザーを現在のユーザーとして使用し、実行します。現在の Windows ユーザーがデータベースにない場合、プログラムは以前のコードに戻ります。

これにより、ユーザーは任意の形式のユーザー名を使用してマシンにログインでき、Windows で認証されます。私たちのプログラムは常に同じ形式でユーザー名を取得し、常にその形式でユーザー名をチェックします。Windows は、私たちではなくユーザーを認証します。

于 2012-09-11T13:58:21.947 に答える
3

区切り文字として使用して名前を分割し\、次のように順序を逆にすることができます。

string[] splitName = WindowsIdentity.GetCurrent().Name.Split('\\');
//check that splitName contains at least 2 values before using
string name = (splitName.Length > 1) ? splitName[1] + "@" + splitName[0] : null;

\\バックスラッシュは特殊文字であるため、二重のバックスラッシュが必要であることに注意することが重要です。上記の例に 2 番目のバックスラッシュを追加して、特殊文字をエスケープし、通常の文字として使用します。

于 2012-08-28T20:11:18.687 に答える
0

これらの線に沿った何か。

var nameParts = WindowsIdentity.GetCurrent().Name.Split(@"\");
string name = nameParts.Length == 1 
    ? nameParts  
    : string.format("{0}@{1}",nameParts[1],nameParts[0]);
于 2012-08-28T20:16:58.437 に答える