আমি কীভাবে সি # ব্যবহার করে .NET- র বর্তমান ব্যবহারকারীর নাম পেতে পারি?


606

আমি কীভাবে সি # ব্যবহার করে .NET- র বর্তমান ব্যবহারকারীর নাম পেতে পারি?

উত্তর:


897
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

96
এর চেয়ে আলাদা কীভাবে Environment.UserName?
স্যাম হারওয়েল

59
@ সিমনগিলবি, এটি ভুল, Environment.UserName"রানআস" ব্যবহারকারীকে ফিরিয়ে দেবে।
বলু

5
যাচাই করার জন্য .... MessageBox.Show(Environment.UserName);এটি আপনার window_loadedইভেন্টে রাখুন এবং রানএএস ব্যবহার করে এটি চালান ....
বলু


4
এই ফিরে আসে Domain\Username। আমি কীভাবে ব্যবহারকারীর নামটির সাথে যুক্ত নাম পেতে পারি?
সার্চফোরকনলজ

325

আপনি যদি ব্যবহারকারীদের নেটওয়ার্কে থাকেন তবে ব্যবহারকারীর নামটি ভিন্ন হবে:

Environment.UserName
- Will Display format : 'Username'

বরং

System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'

আপনি যে ফর্ম্যাটটি চান তা চয়ন করুন।


7
Environment.UserDomainName + "\\" + Environment.UserNameআপাতদৃষ্টিতে একই ফলাফল হিসাবে আপনি ব্যবহার করতে পারেন System.Security.Principal.WindowsIdentity.GetCurrent().Name। এখন, কি পার্থক্য, আপনি জিজ্ঞাসা করুন ... আমি নিশ্চিত নই।
গটবলেন্ডার

9
কে লগ ইন হয়েছে তার পরিবর্তে আমার অ্যাপটি চালিয়ে যাওয়া দরকার ছিল (এনভায়রনমেন্ট System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
U ইউজারনেম

কল ToArray()করার Splitআগে আপনাকে যুক্ত করতে হবেLast()
কোডেনমেজারো

1
@codenamezero কোন ToArray()প্রয়োজন হয়। আপনার using System.Linq;যদিও প্রয়োজন হবে ।
TheSoftwareJedi

112

সম্পত্তি চেষ্টা করুন: Environment.UserName


5
অথবা,string userName = Environment.UserName;
ডোনাট

10
সাবধানতা: স্বীকৃত উত্তরের মন্তব্যে উল্লিখিত সাইমন গিলবি যেমন Environment.UsernNameলগ-ইন করা অ্যাকাউন্ট-নাম দেয়, তবে WindowsIdentity.GetCurrent().Nameসেই অ্যাপ্লিকেশনটি যে অ্যাকাউন্ট-নামটি চলছে তা ফিরিয়ে দিচ্ছে।
গেরওয়াল্ড

5
@ লিও: সতর্কতা: সেই তথ্যগুলিও স্পষ্টতই ভুল, বলুর জবাব দেখুন । :-)
টিজে ক্রাউডার

এএসপি.নেট দিয়ে এটি ব্যবহার করবেন না। ডকস.মাইক্রোসফট.কম বলেছেন: "যদি কোনও এএসপি.এনইটি অ্যাপ্লিকেশন কোনও বিকাশের পরিবেশে চালিত হয় তবে ব্যবহারকারীর নাম সম্পত্তি বর্তমান ব্যবহারকারীর নাম ফিরিয়ে দেয় a যেমন ডিফল্ট অ্যাপপুল) "
ফিহোয়া

28

পরিবেশের জন্য ডকুমেন্টেশন.ইউজারনেমটি কিছুটা বিরোধী বলে মনে হচ্ছে:

পরিবেশ। ব্যবহারকারী নাম সম্পত্তি

একই পৃষ্ঠায় এটি বলে:

বর্তমানে উইন্ডোজ অপারেটিং সিস্টেমে লগ ইন করা ব্যক্তির ব্যবহারকারীর নাম পান।

এবং

বর্তমান থ্রেড শুরু করা ব্যক্তির ব্যবহারকারীর নাম প্রদর্শন করে

আপনি যদি রান.এ ব্যবহার করে পরিবেশের.উজারনেম পরীক্ষা করেন তবে এটি আপনাকে রানএর ব্যবহারকারী অ্যাকাউন্টের নাম দেবে, ব্যবহারকারী উইন্ডোজে মূলত লগইন হয়নি।


24

আমি অন্য উত্তরগুলিতে পুরোপুরি দ্বিতীয়, তবে আমি আরও একটি পদ্ধতি হাইলাইট করতে চাই যা বলে

String UserName = Request.LogonUserIdentity.Name;

উপরের পদ্ধতিটি আমাকে ফর্ম্যাটটিতে ব্যবহারকারীর নামটি ফিরিয়ে দিয়েছে: ডোমেননাম \ ব্যবহারকারী নাম । উদাহরণস্বরূপ, ইউরোপ \ ব্যবহারকারীর নাম

যা থেকে পৃথক:

String UserName = Environment.UserName;

যা ফর্ম্যাটে প্রদর্শিত হয়েছে: ব্যবহারকারীর নাম

এবং পরিশেষে:

String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

যা দিয়েছে: NT AUTHORITY\IUSR(আইআইএস সার্ভারে DomainName\UserNameঅ্যাপ্লিকেশন চালানোর সময় ) এবং (স্থানীয় সার্ভারে অ্যাপ্লিকেশন চালানোর সময়)।


"অনুরোধ।" ব্যবহার করার জন্য কোন নেমস্পেসের প্রয়োজন?
TK-421

1
@ TK-421 Requestকেবলমাত্র যদি আপনি ওয়েব অ্যাপ্লিকেশন হন তবেই কাজ করে। এটির উদাহরণSystem.Web.HttpRequest
জেরার্ডো গ্রিগনিওলি


11

আপনি এটি ব্যবহার করে দেখতেও চাইতে পারেন:

Environment.UserName;

এটার মত...:

string j = "Your WindowsXP Account Name is: " + Environment.UserName;

আশা করি এটি সহায়ক হয়েছে।


11

আমি বিদ্যমান উত্তরগুলি থেকে বেশ কয়েকটি সংমিশ্রণ চেষ্টা করেছি, তবে তারা আমাকে দিচ্ছিল

DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool

আমি ব্যবহার শেষ

string vUserName = User.Identity.Name;

যা আমাকে প্রকৃত ব্যবহারকারীদের ডোমেন ব্যবহারকারীর নাম দিয়েছে।


চমৎকার। আমি কেবল অ্যাপ পুল পরিচয়টি পেয়েছি। তবে আপনার কোডটি আমার সমস্যার সমাধান করেছে। তোমাকে অনেক ধন্যবাদ.
সূর্যকবিঠা

মনে হচ্ছে আপনি কোনও অনুরোধ করা ব্যবহারকারীর ব্যবহারকারীর নামটি চেয়েছিলেন, আমি কোনও এমভিসি বা ওয়েব এপিআই নিয়ন্ত্রকের কাছে অনুমান করি। প্রক্রিয়াটি যে ব্যবহারকারীর অধীনে চলছে
সেটির

@ বেনারসনসন ব্যবহারকারী নাম ব্যবহার করে একটি প্রক্রিয়া চালাচ্ছে সে সম্পর্কে প্রশ্নটি কিছু বলেনি। আমার বর্তমানে ডোমেন ব্যবহারকারীর ব্যবহারকারীর নাম প্রয়োজন ছিল এবং একটি অনুসন্ধান আমাকে এই পৃষ্ঠায় নিয়ে এসেছিল, এই কোডটি আমার যা প্রয়োজন তা দিয়েছিল।
ড্যানিয়েল ই।


9

System.Windows.Forms.SystemInformation.UserNameপ্রকৃত লগ ইন করা ব্যবহারকারীর জন্য ব্যবহার করুন যেমন Environment.UserNameবর্তমান প্রক্রিয়াটি ব্যবহার করা অ্যাকাউন্টটি ফেরত দেয়।


ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ, এছাড়াও দেখুন: System.Windows. Forms.SystemInformation.UserDomainName
আশীষ সিং

9

যদি কেউ জন্য ব্যবহারকারীকে খুঁজছেন হয় প্রদর্শন নাম হিসাবে বিরোধিতা ব্যবহারকারী নাম আমার মত।

এখানে ট্রিটটি দেওয়া হচ্ছে:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

System.DirectoryServices.AccountManagementআপনার প্রকল্পে রেফারেন্স যুক্ত করুন ।


6

আমি পূর্ববর্তী সমস্ত উত্তর চেষ্টা করেছিলাম এবং এর মধ্যে আমার পক্ষে কোনও কাজ না করার পরে উত্তরটি এমএসডিএন-তে পেয়েছি। আমার জন্য সঠিকটির জন্য 'ব্যবহারকারীর নাম 4' দেখুন।

আমি লগ-ইন ব্যবহারকারীর পরে আছি , যেমন প্রদর্শিত:

<asp:LoginName ID="LoginName1" runat="server" />

এই সমস্ত চেষ্টা করার জন্য আমি এখানে একটি ছোট ফাংশন লিখেছি। আমার ফলাফল প্রতিটি সারির পরে মন্তব্যে।

protected string GetLoggedInUsername()
{
    string UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // Gives NT AUTHORITY\SYSTEM
    String UserName2 = Request.LogonUserIdentity.Name; // Gives NT AUTHORITY\SYSTEM
    String UserName3 = Environment.UserName; // Gives SYSTEM
    string UserName4 = HttpContext.Current.User.Identity.Name; // Gives actual user logged on (as seen in <ASP:Login />)
    string UserName5 = System.Windows.Forms.SystemInformation.UserName; // Gives SYSTEM
    return UserName4;
}

এই ফাংশনটি কল করার ফলে লগইন হওয়া ব্যবহারকারীর নামটি ফিরে আসে।

আপডেট: আমি উল্লেখ করতে চাই যে আমার স্থানীয় সার্ভারে এই কোডটি চালানো আমাকে দেখায় যে ব্যবহারকারীর নাম 4 "" (একটি ফাঁকা স্ট্রিং) ফিরে আসে, তবে ইউজারনেম 3 এবং ইউজারনেম 5 লগ ইন হওয়া ব্যবহারকারীকে ফিরিয়ে দেয়। সাবধান থাকার মতো কিছু।


আমার ওয়েবসাইটটি আইআইএস ব্যবহার করছে তবে আমি যখন নেটওয়ার্কের মধ্যে অন্য কম্পিউটার থেকে পৃষ্ঠাটি দেখতে যাই, তখন আমি "নেটওয়ার্ক পরিষেবা" ব্যবহারকারীর নাম হিসাবে দেখি। আমি সমস্ত ভিন্ন বিকল্প চেষ্টা করেছিলাম তবে এটি পৃষ্ঠাটি দেখছে এমন লগ ইন করা ব্যবহারকারী আমাকে দেয় না। কোন ধারণা?
সি

3
দ্রষ্টব্য: এটি পরিষ্কার করে দেওয়া হয়নি, তবে উপরের উদাহরণটি আইআইএসে চলমান ওয়েব অ্যাপ্লিকেশনটির প্রসঙ্গে প্রযোজ্য, যেখানে তাদের বেশিরভাগ এএসপি.নেট অ্যাপ্লিকেশন পুল কার্যকর করে এমন সার্ভার উইন্ডোজ অ্যাকাউন্টের নাম প্রদর্শন করবে। একটি ইন্টারেক্টিভ প্রোগ্রাম বা উইন্ডোজ পরিষেবা হিসাবে চলমান থাকলে, এইচটিটিপি কনটেক্সট থেকে একটি অনুপলব্ধ হবে এবং অন্য যে কোনও একটিকে প্রক্রিয়াটি সম্পাদন করে এমন অ্যাকাউন্ট সন্ধান করতে ব্যবহার করা উচিত।
ওসকার বার্গগ্রেন

4

এখানে কোডটি (তবে সি # তে নেই):

Private m_CurUser As String

Public ReadOnly Property CurrentUser As String
    Get
        If String.IsNullOrEmpty(m_CurUser) Then
            Dim who As System.Security.Principal.IIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()

            If who Is Nothing Then
                m_CurUser = Environment.UserDomainName & "\" & Environment.UserName
            Else
                m_CurUser = who.Name
            End If
        End If
        Return m_CurUser
    End Get
End Property

এখানে কোড (এখন সি # তেও রয়েছে):

private string m_CurUser;

public string CurrentUser
{
    get
    {
        if(string.IsNullOrEmpty(m_CurUser))
        {
            var who = System.Security.Principal.WindowsIdentity.GetCurrent();
            if (who == null)
                m_CurUser = System.Environment.UserDomainName + @"\" + System.Environment.UserName;
            else
                m_CurUser = who.Name;
        }
        return m_CurUser;
    }
}

ধরা যাক সি # তে উত্তর হবে
শিবম ভরদ্বাজ

4

এটা চেষ্টা কর

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];

এখন এটি আরও ভাল দেখাচ্ছে


3

বর্তমান উইন্ডো ব্যবহারকারীর নাম পান:

using System;

class Sample
{
    public static void Main()
    {
        Console.WriteLine();

        //  <-- Keep this information secure! -->
        Console.WriteLine("UserName: {0}", Environment.UserName);
    }
}

আমার ওয়েবসাইটটি আইআইএস ব্যবহার করছে তবে আমি যখন নেটওয়ার্কের মধ্যে অন্য কম্পিউটার থেকে পৃষ্ঠাটি দেখতে যাই, তখন আমি "নেটওয়ার্ক পরিষেবা" ব্যবহারকারীর নাম হিসাবে দেখি। আমি সমস্ত ভিন্ন বিকল্প চেষ্টা করেছিলাম তবে এটি পৃষ্ঠাটি দেখছে এমন লগ ইন করা ব্যবহারকারী আমাকে দেয় না। কোন ধারণা?
সি

2

একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশন যা বেশ কয়েকটি ব্যবহারকারীর কাছে বিতরণ করা হয়েছিল, যার মধ্যে অনেকগুলি ভিপিএন-এর উপর লগইন করেছিল, আমি বেশ কয়েকটি উপায় চেষ্টা করেছিলাম যা সবগুলি আমার স্থানীয় মেশিন পরীক্ষার জন্য কাজ করেছিল তবে অন্যদের জন্য নয়। আমি এমন একটি মাইক্রোসফ্ট নিবন্ধ পেয়েছি যা আমি গ্রহণ করেছি এবং এটি কাজ করি।

using System;
using System.Security.Principal;

namespace ManageExclusion
{
    public static class UserIdentity

    {
        // concept borrowed from 
        // https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx

        public static string GetUser()
        {
            IntPtr accountToken = WindowsIdentity.GetCurrent().Token;
            WindowsIdentity windowsIdentity = new WindowsIdentity(accountToken);
            return windowsIdentity.Name;
        }
    }
}

1

যদি এটি অন্যদের জন্য সহায়ক হয় তবে আমি যখন সি # .NET 3.5 অ্যাপ থেকে ভিজ্যুয়াল স্টুডিও 2017 এ একটি অ্যাপ্লিকেশন আপগ্রেড করেছি তখন এই লাইন কোডটিতেUser.Identity.Name.Substring(4); এই ত্রুটিটি ছুঁড়ে ফেলা হয়েছে " স্টার্টইন্ডেক্স স্ট্রিংয়ের দৈর্ঘ্যের চেয়ে বড় হতে পারে না " (এটি আগে বাউল হয়নি)।

এটি খুশি হয়েছিল যখন আমি এটিকে পরিবর্তন করেছিলাম System.Security.Principal.WindowsIdentity.GetCurrent().Nameতবে Environment.UserName;উইন্ডোজ ব্যবহারকারী এবং লগইন ডোমেন ছাড়াই লগইন করতে ব্যবহার করে শেষ করেছি ended


ধন্যবাদ @ ডোরিন আপনাকে এটি দরকারী বলে মনে হয়েছে।
শিবাম ভরদ্বাজ

0

আমি এখানে বেশিরভাগ উত্তর দিয়েছি এবং তাদের মধ্যে কেউই আমাকে সঠিক ব্যবহারকারীর নাম দেয় নি।

আমার ক্ষেত্রে আমি অন্য ব্যবহারকারীর কাছ থেকে আমার অ্যাপ্লিকেশনটি চালনার সময় লগইন করা ব্যবহারকারী নামটি পেতে চাইতাম, যেমন শিফট + যখন কোনও ফাইলের উপর ডান ক্লিক করুন এবং "ভিন্ন ব্যবহারকারী হিসাবে চালান" like

যে উত্তরগুলি আমি চেষ্টা করেছি তা আমাকে 'অন্যান্য' ব্যবহারকারীর নাম দিয়েছে।

এই ব্লগ পোস্টটি ব্যবহারকারীর নাম লগইন করার জন্য একটি উপায় সরবরাহ করে, যা আমার দৃশ্যেও কাজ করে:
https://smbadiwe.github.io/post/track- activities-windows-service/

এটি Wtsapi ব্যবহার করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.