Tag: directoryservices

通过System.DirectoryServices管理终端用户

我有一个环境,我需要经常将参数更改为用户登录终端服务器时启动的程序。 截至目前,我们打开计算机管理管理单元并编辑用户的环境选项卡,并在“登录时启动以下程序:”下手动更改参数。 我想自动化这个过程。 我一直在寻找System.DirectoryServices和System.DirectoryServices.AccountManagement并阅读我所能做的一切。 到目前为止,我最好的猜测是我需要编辑的信息存储在“参数”属性中(对于属性来说可能是最糟糕的名称,废话搜索)。 猜测的原因是我列出了我得到的所有属性 (…) Name: HomeDirDrive Value: Name: Parameters Value: P☺CtxCfgPresent????☺CtxCf gFlags1????☺CtxShadow????*☻☺CtxMinEncryptionLevel? @☺CtxWorkDirectory??????????? ?????????????????????”C☺CtxInitialProgram??????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????? ??????????????? Name: PrimaryGroupID Value: 513 (…) CtxInitialProgram和CtxWorkDirectory似乎与我正在使用的内容相关。 现在我陷入困境,因为我无法弄清楚如何,或找到和资源来帮助我,正确地读取和写入值。 任何帮助将不胜感激。 编辑 – 我在互联网上的其他地方找到了这个答案在互联网上的其他地方问我找到了答案: 不幸的是,这些数据是以专有格式编码的。 以编程方式管理它的唯一受支持的方法是使用终端服务附带的IADsTSUserEx ADSI接口。 您基本上只是将NativeObject属性强制转换为此COM接口(在创建所需的COM引用之后),然后访问该接口公开的属性。 现在我的问题是如何设置COM引用,我之前从未做过类似的事情。

什么是LDAP的连接字符串?

在这里我需要如何使用它: string tmpDirectory = String.Format(“LDAP://ou={0},dc={1},dc={2}”, parentOrganizationUnit, domainName, domainExtension ); 当我尝试使用此连接运行一些代码时,我得到一个例外。 ( 有关更多信息,请参阅此问题 )。 我被告知我需要提供连接字符串凭证 – 用户名和密码。 什么是连接字符串? 我需要确切的语法。 :) 谢谢! 我正在使用Windows Server 2003和Active Directory。

System.DirectoryServices很慢?

当用户登录网站时,我正在使用以下代码在Active Directory中查找信息。 针对本地域运行它非常快,但是通过VPN运行到远程可信域,它非常慢(需要大约7或8秒)。 从同一个盒子到远程域运行dsa.msc几乎和在本地运行它一样快。 我正在使用属性过滤来检索可能的最小数据量,因此在这种情况下System.DirectoryServices是否存在某些内在缓慢的问题,或者是否有人对如何提高性能有任何提示? 通过VPN的网络连接很好,只有这个代码运行缓慢。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.DirectoryServices; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (var LDAPConnection = new DirectoryEntry(“LDAP://domain/dc=domain,dc=com”, “username”, “password”)) { LDAPConnection.AuthenticationType = AuthenticationTypes.Secure; using (DirectorySearcher Searcher = new DirectorySearcher(LDAPConnection)) { Searcher.Filter = “(&(&(objectclass=user)(objectcategory=person))sAMAccountName=username)”; Searcher.PropertiesToLoad.Add(“mail”); SearchResult result = Searcher.FindOne(); //this […]

C#使用不同的用户凭据访问活动目录

我们刚刚为用户提供了一个新的用户创建应用程序。 但是,这些用户需要能够通过应用程序创建用户,即使他们自己没有创建用户的权限。 在C#中,您如何模拟其他用户才能拥有此function。 此应用程序主要使用System.DirectoryServices 。 代码段: DirectoryEntry dEntry = new DirectoryEntry(“LDAP://OU=”); DirectorySearcher dSearcher = new DirectorySearcher(dEntry); //filter just user objects dSearcher.SearchScope = SearchScope.Subtree; dSearcher.Filter = “(&(objectClass=user)(mail=” + excel_Holding_Table.Rows[i][“EmailAddress”].ToString() + “))”; dSearcher.PageSize = 1000; sResults = dSearcher.FindAll();

如何使用C#读取“uSNChanged”属性

我想通过使用C#的ActiveDirectory中的uSNChanged值获取最后修改或创建的属性…我也试图找到uSNChanged的最大值,你能帮我找出解决方案吗? 谢谢

如何从Active Directory获取组织单位列表?

我查看了DirectoryServices类,它似乎是我需要的,但我似乎无法找到获取组织单位集合所需的类/方法。 你们能提出一些建议吗?

GroupPrincipal.GetMembers在组(或子组,如果递归)包含ForeignSecurityPrincipal时失败

对于遇到同样问题的人来说,这不是一个问题。 发生以下错误: System.DirectoryServices.AccountManagement.PrincipalOperationException: An error (87) occurred while enumerating the groups. The group’s SID could not be resolved. at System.DirectoryServices.AccountManagement.SidList.TranslateSids(String target, IntPtr[] pSids) at System.DirectoryServices.AccountManagement.SidList.ctor(List`1 sidListByteFormat, String target, NetCred credentials) at System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.TranslateForeignMembers() 运行以下代码并且组或子组包含ForeignSecurityPrincipal时: private static void GetUsersFromGroup() { var groupDistinguishedName = “CN=IIS_IUSRS,CN=Builtin,DC=Domain,DC=com”; //NB: Exception thrown during iteration of members rather than call to GetMembers. using […]

从.NET连接到LDAP服务器

我建议使用System.DirectoryServices.Protocols ,以支持连接到Active Directoy以外的LDAP服务器。 不幸的是,我无法正确搜索目录。 我希望能够为用户获得某个属性(例如mail )。 通过使用DirectorySearcher类,可以在System.DirectoryServices命名空间中轻松完成此操作。 如何在System.DirectoryServices.Protocols命名空间中实现相同的function。 这是我到目前为止所拥有的: var domainParts = domain.Split(‘.’); string targetOu = string.Format(“cn=builtin,dc={0},dc={1}”, domainParts[0], domainParts[1]); string ldapSearchFilter = string.Format(“(&(ObjectClass={0})(sAMAccountName={1}))”, “person”, username); // establish a connection to the directory LdapConnection connection = new LdapConnection( new LdapDirectoryIdentifier(domain), new NetworkCredential() { UserName = username, Password = “MyPassword” }); SearchRequest searchRequest = new SearchRequest( targetOu, […]

获取AD OU列表

我希望能够从Active Directory中提取当前OU的列表我已经在线查看一些示例代码,但是O似乎无法使其工作。 string defaultNamingContext; DirectoryEntry rootDSE = new DirectoryEntry(“LDAP://RootDSE”); defaultNamingContext = rootDSE.Properties[“defaultNamingContext”].Value.ToString(); DirectorySearcher ouSearch = new DirectorySearcher(rootDSE, “(objectClass=organizationalUnit)”, null, SearchScope.Subtree); MessageBox.Show(rootDSE.ToString()); try { SearchResultCollection collectedResult = ouSearch.FindAll(); foreach (SearchResult temp in collectedResult) { comboBox1.Items.Add(temp.Properties[“name”][0]); DirectoryEntry ou = temp.GetDirectoryEntry(); } 我得到的错误是提供商不支持搜索,无法搜索LDAP:// RootDSE任何想法? 对于每个返回的搜索结果,我想将它们添加到combobox中。 (不应该太难)

如果OU包含3000个用户,如何使用DirectorySearcher查找所有用户?

我用这个代码: DirectoryEntry objEntry; DirectorySearcher objSearchEntry; SearchResultCollection objSearchResult; string strFilter = “(&(objectCategory=User))”; objEntry = new DirectoryEntry(conOUPath, conUser, conPwd, AuthenticationTypes.Secure); objEntry.RefreshCache(); objSearchEntry = new DirectorySearcher(objEntry); objSearchEntry.Filter=strFilter; objSearchEntry.SearchScope=SearchScope.Subtree; objSearchEntry.CacheResults=false; objSearchResult=objSearchEntry.FindAll(); 每次只返回1000个用户,但该OU中有3000个用户。 我怎样才能找到所有这些?