【问题标题】:How do I change Remote Desktop Services properties of AD users in .NET?如何在 .NET 中更改 AD 用户的远程桌面服务属性?
【发布时间】:2010-03-06 15:20:39
【问题描述】:

我需要在 .NET 中为 Active Directory 用户设置与远程桌面服务相关的属性(即通过 System.DirectoryServices),但我看不到这些属性是由 API 公开的吗?我知道有一个用于此目的的 COM 接口,IADsTSUserEx。请告诉我如何在 .NET 中获得这些属性 :) 请记住,编程语言是 Python。

【问题讨论】:

    标签: .net python active-directory directoryservices


    【解决方案1】:

    .NET DirectoryServices API 不直接公开 AD 属性:相反,DirectoryEntry 类上有一个大的 Properties 集合。如果您可以在底层 AD 架构中找到属性的名称,那么您就可以在此集合中找到它们。

    这个列表应该有你感兴趣的属性:http://msdn.microsoft.com/en-us/library/ms675090.aspx

    例如,msTSMaxIdleTime 属性:http://msdn.microsoft.com/en-us/library/ms678175.aspx

    【讨论】:

    • 我看不出这行得通。从 Active Directory 用户和计算机控制台,我将某个用户的远程桌面服务用户配置文件路径(通过属性-> 远程桌面服务配置文件)设置为某个路径。我假设相应的 DirectoryEntry 属性是“msTSProfilePath”?但是,当我获得与该用户对应的 DirectoryEntry 时,没有为 msTSProfilePath 属性设置任何值。我已经在pastebin.com/gJJM3PEH 发布了相关的 Python 代码。结果输出是一个空列表。
    • 我现在无权设置它(我正在工作),但让我看看我是否可以稍后检查。你能修改 Python 代码以转储所有属性的名称吗?
    【解决方案2】:

    其中一些属性的问题在于,您可以通过 Active Directory 用户和计算机在 UI 上看到它们,但不能通过 ADSI 编辑器设置(或查看)它们。

    通常,对于不能直接从 DirectoryEntry 对象获得的属性,您可以使用其 Properties 集合,如 Tim Robbinson 所述 (例如directoryEntry.Properties["PropertyName"].Value)。

    但是,对于某些属性,您不能使用这种方法,而必须使用directoryEntry.InvokeSet("PropertyName", new object[]{ "SomeValue" });

    例如对于TerminalServicesHomeDirectoryTerminalServicesHomeDriveTerminalServicesProfilePath

    如上所述,您不会使用 ADSI Editor 看到这三个属性,您只能通过相应选项卡上的“普通”UI 看到属性值。

    我不知道如何将所有这些应用到 Python,但似乎你已经有了 DirectoryEntry 类的实例,所以你应该没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2014-11-11
      • 2012-05-05
      相关资源
      最近更新 更多