c# - 使用ADSI检索本地组成员所需的权限

标签 c# windows .net-core adsi

使用ADSI,我可以通过执行以下操作来查询给定计算机上的本地Administrator组的成员(例如,在PowerShell中):

([ADSI]"WinNT://computer-name/Administrators,Group").Invoke("members")
据我所知,要执行此操作,运行PowerShell脚本的用户需要在目标计算机上具有管理员权限-也就是说,该用户需要直接间接位于computer-name的本地管理员组中(例如,通过成为成员) “域管理员”)。
这让我感到惊讶,因为可以登录computer-name的非管理员帐户(例如,属于“域用户”的用户,而没有其他权限)可以打开本地用户和组应用程序,并查看本地管理员组的成员。手动执行此操作不需要特定权限,但ADSI似乎需要它。
所以我的问题是:
  • 使用ADSI是否需要管理员权限才能访问此信息,还是我做错了吗?
  • 是否有其他方法可以以编程方式获取此信息,该方法所需的特权少于管理员帐户? (如果有在PowerShell中不可用的解决方案,那我的目标是C#/。NET Core)

  • 请注意,我要在其他工作站上远程运行-不仅仅是在本地工作站上运行。

    最佳答案

    ADSI建立在WMI之上。默认情况下,仅允许本地Administrators组进行远程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

    关于c# - 使用ADSI检索本地组成员所需的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62393322/

    相关文章:

    c# - 获取错误 : Not all code paths return a value

    python - Windows下获取系统信息(CPU速度-总RAM-显卡型号等)

    windows - 为应用程序选择合适的文件扩展名

    windows - 如何在 MSSQL Server 连接字符串中从 docker 容器引用主机端口?

    c# - ASP.NET Core 7.0 - 配置 Kestrel applicationURL

    c# - 编码结构数组与类

    c# - 检查属性是否存在 DataTable.ExtendedProperties 属性

    C# 添加列表/列表到数据类实例

    c# - 在 C# 中获取 Windows Server 关闭原因

    c# - .Net Core 3 worker 服务应用程序,带有带参数的构造函数的插件