c# - 使用 ADSI 检索本地组成员所需的权限
问题描述
使用 ADSI,我可以通过执行以下操作(例如在 PowerShell 中)查询给定计算机上本地管理员组的成员:
([ADSI]"WinNT://computer-name/Administrators,Group").Invoke("members")
为此,据我所知,运行 PowerShell 脚本的用户需要在目标计算机上具有管理员权限 - 也就是说,用户需要直接在本地管理员组中computer-name
(例如,通过成为“域管理员”)。
这让我感到惊讶,因为可以登录的非管理员帐户computer-name
(例如,属于“域用户”的用户)可以打开本地用户和组应用程序,并查看本地管理员组的成员。手动执行时不需要特定权限,但 ADSI 似乎需要它。
所以我的问题是:
- 使用 ADSI 您需要管理员权限才能访问此信息是否正确,或者我做错了什么?
- 是否有不同的方法以编程方式获取此信息,它需要的权限比管理员帐户少?(如果 PowerShell 中没有可用的解决方案也没关系,我的目标是 C#/.NET Core )
请注意,我想在其他工作站上远程运行它——而不仅仅是在本地工作站上。
解决方案
ADSI 建立在 WMI 之上。默认情况下,只允许本地管理员组进行远程 WMI 调用和读取计算机本地目录数据。
您可以通过进入来更改操作系统的权限Computer Management (local) -> Services and Applications -> WMI Control
。右键单击WMI Control
并选择Properties
。
我只尝试过允许所有读取,您可以在root
文件夹上设置。我做了一些研究,您也许可以将其限制为仅 LDAP。在Security
选项卡上向下钻取到Root -> directory -> LDAP
. 您需要调整LDAP
条目的权限(或者更多?)。关键权限是Remote Enable
.
更新
直接从 PowerShell 查询 WMI。
通过 PowerShell 进行远程 WMI:https ://docs.microsoft.com/en-us/windows/win32/wmisdk/connecting-to-wmi-on-a-remote-computer 。
通过 WMI 列出远程组成员身份的自定义 PowerShell 方法:https ://gallery.technet.microsoft.com/scriptcenter/List-local-group-members-c25dbcc4
推荐阅读
- python - 如何在python中以'yyyy-mm-dd'格式添加一天?
- python - 使用 python cli 工具更改当前终端的目录
- google-sheets - 如何获取原始矩阵的每个单元格的行号矩阵?
- javascript - 在没有 push() 的情况下将模式添加到数组
- python - 如何从目标数据框中删除列,但合并中的连接需要列
- flutter - 为什么我不能在 build() 中使用 context.read,但我可以使用 Provider.of with listen: false?
- html - 如何在 Azure linux Web 应用上托管静态 HTML 页面?
- teamcity - 如何在团队城市2020中构建.net核心项目?
- java - 如何在 Spring 中将 OrderBy 与 JPA 存储库一起使用
- azure - 如何从 Power BI 查询 Azure 数字孪生?