c# - 获取 Windows 资源管理器中显示的文件/目录所有者
问题描述
当我在 Windows 资源管理器中查看文件或文件夹时,它通常将所有者显示为特定用户;在我的环境中,显示为<domain>\<username>
. 当我将所有者列添加到文件夹视图时,以及通过右键单击文件并查看详细信息选项卡时,它都会显示此信息。我认为这是大多数人在考虑文件或目录的所有者时所期望看到的。
我想获取大量文件和文件夹的拥有用户信息。但是,当我按照每个教程、博客文章和论坛答案的建议以编程方式在powershell中获取所有者时,它会将所有者显示为BUILTIN\Administrators
:
PS:>Get-Item '.\file.txt' | Get-Acl | Format-List
Path : Microsoft.PowerShell.Core\FileSystem::Z:\path\to\file.txt
Owner : BUILTIN\Administrators
Group : <domain>\Domain Users
Access : NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Administrators Allow FullControl
<domain>\<myusername> Allow FullControl
Audit :
Sddl : <lots of fancy letters>
有各种帖子解释了为什么会发生 这种 情况(TL;DR:由管理员组成员的用户创建的项目),所以不需要在这里重读。而且我可以看到我真正要寻找的信息是该属性System.Security.AccessControl.FileSystemAccessRule
下的对象之一。Access
我正在考虑解决方法,包括从列表中过滤BUILTIN
/NT AUTHORITY
记录Access
,或者在这个有用的问题中过滤一个类。
然而,这些解决方案似乎既低效又不优雅。在 UI 中,当我想查看项目的所有者时,Windows 似乎“知道我的意思”。因此,没有更直接的方法可以在代码中获取该信息,这似乎真的很奇怪。
Explorer 从哪里提取其所有者信息?它真的也在做某种低效的启发式列表过滤吗?
还是必须没有直接的方法来解决这个问题?
powershell、c#或任何.net语言的解决方案非常感谢!
尝试并失败:
先调用,然后再调用结果的这个问题的解决方案对我不起作用;仍然只输出。.GetAccessControl().GetOwner(typeof(System.Security.Principal.SecurityIdentifier))
.Translate(typeof(System.Security.Principal.NTAccount))
BUILTIN\Administrators
cmd.exe
'sdir <file> /Q
给出了相同的结果,正如包括这个答案在内的各个地方所建议的那样。
还发现它会$file.GetAccessControl()
产生与命令行开关相同的无用信息Get-Acl
。
解决方案
推荐阅读
- kotlin - 在 micronaut 属性中使用数据类
- regex - 根据名称更改 pandas 列中的文本
- python - 循环并加载 yaml 文件的压缩文件夹
- google-cloud-platform - 无法在 jupyterlab notebook 谷歌云人工智能平台上运行单元
- excel - 如何抑制 Excel VBA 中的“错误加载扩展”消息?
- javascript - 比较两个街道地址的最佳方法是什么?
- unity3d - unity 将原点移至地图左下角
- javascript - 如何通过php传递带有“其他”选项的下拉值?
- javascript - 按索引删除人脸 - three.js
- ajax - 使用 AJAX 和验证器类进行 JSF 表单验证