質問

ネットワークディレクトリをループし、各ファイル/フォルダーに関連付けられているユーザー/グループ名(許可)を出力しようとしています。 SIDのバックを取得していますが、「S-1-5-32-544」ではなく「Group_test」などの名前が欲しいです。これが私のコードです -

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));
                    }  }

上記のコードからsidを取得しますが、代わりにこれを使用する場合、foreachループで

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

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

Translateメソッドはリモート株で動作しないようです。 SIDの本名を取得するにはどうすればよいですか?リモートサーバーにはLDAPがありません。

ありがとうございました。

役に立ちましたか?

解決

問題は、あなたがsidを解決しようとしていることです ローカル リモートマシンへ。の答えとして この質問 州:

SecurityReference Objectの翻訳方法は、非ローカルSIDで機能しますが、ドメインアカウントでのみ機能します...

これ リンク WMIを使用してSIDをリモートで解決するための例を提供します。これは、おそらくタスクを達成するための最良の方法です。

他のヒント

WMIを使用できる場合は、 win32_useraccount クラス私は思う。それはあります Name プロパティとa SID 財産。

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

これは、C#コードを備えたWMIを使用してリモートPCに接続するための記事です。 方法:リモートコンピューターに接続します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top