次の関数は、現在のWindowsユーザーの名前をdomain\username形式で返すことを知っています。
Convert.ToString( WindowsIdentity.GetCurrent().Name );
しかし、どうすればユーザーの名前をusername@domain
形式で取得できますか?
編集:
返信した人は誰でも同じ基本的な考えを持っているので、私はこの編集で返信しています。
私が理解するように与えられたものから、domain\username
形式から名前を解析し、それをusername@domain
として構築することは、安全ではないか、アドバイスされていません。これは、2つのドメイン名が異なる形式で同じであるという保証がないためだと思います。たとえば、私が働いている会社では、domain\username
形式のdomain
の部分は部門に基づいていますが、username@domain
では会社名です。これは、DNSルックアップを必要とするようなものです。
このDNSルックアップを行うAPIがあることを期待していました。私はこの情報を私の最初の質問に入れるべきだったと思います。ごめんなさい。
このようなものが機能するはずです...
string[] temp = Convert.ToString(WindowsIdentity.GetCurrent().Name).Split('\\');
string userName = temp[1] + "@" + temp[0];
使用する
System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName
これにより、現在のユーザーのUPNが返されます。 System.DirectoryServices.AccountManagementへの参照が必要です。
\
を区切り文字として使用して名前を分割し、次のように順序を逆にすることができます。
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番目の円記号を追加して、特殊文字をエスケープし、通常の文字として使用します。
var input = WindowsIdentity.GetCurrent().Name ;
string[] tab = input.Split('\\');
var result = tab[1] + "@" + tab[0];
これらの線に沿った何か。
var nameParts = WindowsIdentity.GetCurrent().Name.Split(@"\");
string name = nameParts.Length == 1
? nameParts
: string.format("{0}@{1}",nameParts[1],nameParts[0]);