2010-12-15 24 views
4

私はネットワークディレクトリをループして、各ファイル/フォルダに関連付けられたユーザー/グループ名(権限)を出力しようとしています。私はSIDを元に戻していますが、 "S-1-5-32-544"ではなく "group_test"のような名前が必要です。ここに私のコードです -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)); 
        } } 

私が代わりにこれを使用する場合、私は、上記のコードからではなく、foreachループでSIDのを取得する -

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

私はこの例外を取得 - Some or all identity references could not be translated.

それが表示されます変換メソッドはリモート共有では機能しません。 SIDの実際の名前を取得するにはどうすればよいですか?リモートサーバーにLDAPがありません。

ありがとうございます。

答えて

3

問題は、リモートマシンへローカルであるSIDを解決しようとしているということです。 this question状態への答えとして:

SecurityReferenceメソッドは非ローカルのSIDにだけ、ドメインアカウントの作業を行う翻訳のオブジェクト...

このlinkは、リモートで使用してSIDを解決するための例を提供しますWMIはおそらくあなたの仕事を達成するための最良の方法です。

0

WMIを使用できる場合は、Win32_UserAccountクラスを使用して実行できるはずです。それはNameプロパティとSIDプロパティを持っています。

またはグループのWin32_Groupクラス。

はここでC#のコードを持っているWMIを使用してリモートPCに接続するための記事です:How To: Connect to a Remote Computer

関連する問題