2010-07-20 3 views
1

다음 코드를 사용하여 컴퓨터의 로컬 사용자 목록을 가져 오려고합니다.컴퓨터 사용자 얻기

 internal void GetUsers() 
     { 
     try 
     { 
      List<string> adUsers = new List<string>(); 
      DirectoryEntry directoryEntry = new DirectoryEntry("WinNT://" + Environment.MachineName); 

      foreach (DirectoryEntry child in directoryEntry.Children) 
      { 
       if (child.SchemaClassName.Equals("User", StringComparison.OrdinalIgnoreCase)) 
       { 
        adUsers.Add(child.Name); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      //Exception 
     } 
    } 

이 코드는 내 컴퓨터에서 정상적으로 작동합니다. 어떤 사람은 내가이 시스템 사용자를 제거 할 수있는 방법에 대한 몇 가지 빛을 던질 수

ASPNET, HelpAssistant

: 나는 몇 가지 다른 컴퓨터에 그것을 테스트 그러나, 다음과 같은 시스템 사용자는 목록에 포함되었다 실제로 로그인하는 사용자, 즉 일반 사용자 만 확보하십시오.

감사합니다, 같은 램

답변

2

하지 대답하지만 도움이 될 몇 가지 제안.

나는이 계정이 실제 시스템 계정이 아니므로 구별하기가 쉽지 않을 것이라고 생각한다.

WMI 클래스 Win32_UserAccountWin32_UserProfile을보고 정상적인 사용자 계정과 언급 한 사용자 계정을 나타내는 속성이 있는지 확인할 수 있습니다. 특히 Win32_UserAccount의 'SIDType'또는 'AccountType'속성 또는 Win32_UserProfile 클래스의 Special 속성 일 수 있습니다.

다른 가치있는 WMI 클래스 일 수도 있습니다.

또는 사용자 계정에 대화 형 로그온 권한이있는 경우 쿼리 할 수있는 방법이있을 수 있습니다.이 두 가지 계정은 정상적으로 작동하지 않을 수도 있습니다.

+0

안녕 ho1, 답장을 보내 주셔서 감사 많은 ... 나는 특성이 도움이 될 것을 의심 , 그 ... – Ram

1

DirectoryEntry에서 Properties 컬렉션을 열거 해 보았습니까? 그 외에는

using (DirectoryEntry dirEntry = new DirectoryEntry(strchild)) 
    { 
     foreach (string strPropertyName in dirEntry.Properties.PropertyNames) 
     { 
      Console.WriteLine(strPropertyName + " " + dirEntry.Properties[strPropertyName].Value.ToString()); 
     } 
    } 

, 당신은 당신이 액티브 디렉토리 사용자에게 발견 사용자 이름과 일치하는 액티브 디렉토리에서 LDAP 검색을 수행 할 수 있습니다.
이 기사를 살펴보십시오. http://www.codeproject.com/KB/system/everythingInAD.aspx

재미있게 보내십시오.

+0

안녕 blorkfish을 시도하여야한다. havent 그것을 밖으로 시도 .. 시도하고 돌아올거야 .. 귀하의 회신을 보내 주셔서 감사합니다. – Ram

0

다음 코드는 실제로 로컬 액세스 가능 폴더가있는 로컬 사용자를 얻습니다. 더 나은 C# 개발자가 코드를 리팩토링하여 코드를보다 명확하게 만들 수 있다면 도와주세요!

var localDrives = Environment.GetLogicalDrives(); 
var localUsers = new List<string>(); 
var query = new SelectQuery("Win32_UserAccount") { Condition = "SIDType = 1 AND AccountType = 512" }; 
var searcher = new ManagementObjectSearcher(query); 

foreach (ManagementObject envVar in searcher.Get()) 
{ 
    foreach (string drive in localDrives) 
    { 
     var dir = Path.Combine(String.Format("{0}Users", drive), envVar["name"].ToString()); 
     if (Directory.Exists(dir)) 
     { 
      localUsers.Add(envVar["name"].ToString()); 
     } 
    } 
}