如何在C#中从LDAP读取TermainsServices IADsTSUserEx属性?

时间:2008-12-10 09:19:22

标签: c# ldap c#-2.0 terminal-services iadstsuserex

我已阅读AD中的以下属性,

TerminalServicesProfilePath
TerminalServicesHomeDirectory
TerminalServicesHomeDrive

我尝试过DirectoryEntry和DirectorySearcher。但它们不包括属性。

我在vbscript和VC中找到了一些例子来读取它们。 但是我没能在C#中工作。我错过了一些棘手的事情吗?

编辑:我必须在“Windows Server”上运行才能使其正常运行吗?可以从win XP中读取吗?

3 个答案:

答案 0 :(得分:2)

我认为您可以在InvokeGet上使用DirectoryEntry方法,传递您要阅读的媒体资源的名称。

2008-12-10 11:50 CET - 编辑以回应评论

如果我指定一个垃圾属性名称,我会得到相同的COM异常。您确定要检索的属性是AD架构的一部分吗?

为了确保,我使用的代码如下:

using (DirectorySearcher searcher = new DirectorySearcher("(cn=Test)"))
{
    SearchResult result = searcher.FindOne();
    if (result != null)
    {
        DirectoryEntry entry = result.GetDirectoryEntry();
        string s = entry.InvokeGet("TerminalServicesHomeDrive") as string;
        MessageBox.Show(s ?? "null");
    }
}

答案 1 :(得分:1)

我不记得确切,但它是这样的:

//user is a DirectoryEntry
IADsTSUserEx adsiUser = (IADsTSUserEx)user.NativeObject; 

然后您可以通过adsiUser获取所需的TerminalServices属性。

根据我的经验,由于您使用的库,您最好在可以访问AD的Windows Server上进行开发。那你也可能会做上面的工作:)

答案 2 :(得分:1)

这对我有用:

            DirectoryEntry user = new DirectoryEntry("LDAP://" + sLDAP_SERVER + "/cn=" + SAMAccount + "," + sLdapFullPath, sUser, sPwd);

            //ActiveDs.IADsUser iADsUser = (ActiveDs.IADsUser)user.NativeObject;
            ActiveDs.IADsUser cont = null;

            cont = user.NativeObject as ActiveDs.IADsUser;

            TSUSEREXLib.IADsTSUserEx m_TsUser = (TSUSEREXLib.IADsTSUserEx)cont;
            int m_TSLogonDisabled = 0;

            m_TsUser.AllowLogon = m_TSLogonDisabled;