4

我正在遍历网络目录并尝试输出与每个文件/文件夹关联的用户/组名(权限)。我要恢复 SID,但我想要“group_test”之类的名称,而不是“S-1-5-32-544”。这是我的代码 -

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。

谢谢你。

4

2 回答 2

3

问题是您正在尝试解析远程计算机本地的 SID。正如对这个问题的回答所说:

SecurityReference 对象的 Translate 方法确实适用于非本地 SID,但仅适用于域帐户......

链接提供了使用 WMI 远程解析 SID 的示例,这可能是完成任务的最佳方法。

于 2010-12-15T22:51:07.293 回答
0

如果你可以使用 WMI,你应该可以通过我认为的Win32_UserAccount类来做到这一点。它有一个Name属性和一个SID属性。

或组的Win32_Group类。

这是一篇使用具有 C# 代码的 WMI 连接到远程计算机的文章:如何:连接到远程计算机

于 2010-12-15T21:26:41.813 回答