2010-12-15 3 views
4

네트워크 디렉토리를 통해 반복하고 각 파일/폴더와 관련된 사용자/그룹 이름 (사용 권한)을 출력하려고합니다. 나는 SID가 돌아 왔지만 "S-1-5-32-544"가 아닌 "group_test"같은 이름을 원합니다. Some or all identity references could not be translated.SID를 사용자 이름/그룹으로 변환 하시겠습니까?

그것은 나타납니다 -

(NTAccount)((SecurityIdentifier)rule.IdentityReference).Translate(typeof(NTAccount)).Value 

나는이 예외를 얻을 -이 대신 사용하는 경우 나, 위의 코드에서하지만 foreach 루프에서 SID의를 얻을

var files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly); 

       foreach (var f in files2) 
       { 
        var fileInfo = new FileInfo(f); 
        var fs = fileInfo.GetAccessControl(AccessControlSections.Access); 

        foreach (FileSystemAccessRule rule in fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) 
        { 
         var value = rule.IdentityReference.Value; 
         Response.Write(string.Format("File: {0} \t Usergroup: {1} <br/>", fileInfo.Name, value)); 
        } } 

- 여기 내 코드입니다 Translate 메서드가 원격 공유에서 작동하지 않습니다. SID의 실제 이름은 어떻게 검색합니까? 원격 서버에 LDAP가 없습니다.

감사합니다.

답변

3

문제는 원격 시스템에 지역 인 SID를 해결하려고하는 것입니다 :

다음은 C# 코드를 가지고 WMI를 사용하여 원격 PC에 연결하기위한 기사입니다. this question 상태에 대한 답으로 :

SecurityReference이의이 방법을 번역 오브젝트

link 원격으로 사용하여 SID를 해결하기위한 예제를 제공합니다 ... 비 지역의 SID에 있지만 도메인 계정에 대한 작업을 수행 WMI는 아마도 작업을 수행하는 가장 좋은 방법 일 것입니다.