web-dev-qa-db-ja.com

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

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

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

しかし、どうすればユーザーの名前をusername@domain形式で取得できますか?

編集:

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

私が理解するように与えられたものから、domain\username形式から名前を解析し、それをusername@domainとして構築することは、安全ではないか、アドバイスされていません。これは、2つのドメイン名が異なる形式で同じであるという保証がないためだと思います。たとえば、私が働いている会社では、domain\username形式のdomainの部分は部門に基づいていますが、username@domainでは会社名です。これは、DNSルックアップを必要とするようなものです。

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

9
Tony Vitabile

このようなものが機能するはずです...

string[] temp = Convert.ToString(WindowsIdentity.GetCurrent().Name).Split('\\');
string userName = temp[1] + "@" + temp[0];
9
Kevin

使用する

System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName

これにより、現在のユーザーのUPNが返されます。 System.DirectoryServices.AccountManagementへの参照が必要です。

3
Simon Giles

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

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番目の円記号を追加して、特殊文字をエスケープし、通常の文字として使用します。

3
StoriKnow
var input =  WindowsIdentity.GetCurrent().Name ;
string[] tab = input.Split('\\');
var result = tab[1] + "@" +  tab[0];
3
Aghilas Yakoub

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

var nameParts = WindowsIdentity.GetCurrent().Name.Split(@"\");
string name = nameParts.Length == 1 
    ? nameParts  
    : string.format("{0}@{1}",nameParts[1],nameParts[0]);
0