我需要检索有关用户会员资格的完整信息。这是在SSIS(Microsoft Visual Studio 10)中使用C#编写的脚本转换编辑器组件编写的。
顺便说一下,如果我们使用dsget user "cn=...." -memberof
检索,在CONSOLE(cmd)中我能够检索用户的所有组...
我想要的是获得会员资格:
CN = NAME1,OU = WZA,OU = WWWWW,DC = XXXX,DC = YYYY,DC = ZZZZ CN =名称2,OU = WZA,OU = WWWWW,DC = XXXX,DC = YYYY,DC = ZZZY CN = NAME3,OU = WZA,OU = WWWWW,DC = XXXX,DC = YYYY,DC = ZZZA
我得到的:(只有第一行...)
CN = NAME1,OU = WZA,OU = WWWWW,DC = XXXX,DC = YYYY,DC = ZZZZ
代码如下。如何更改它以接收AD在 memberOf 属性中保存的完整信息? (在SSIS中,属性具有unicode字符串的数据类型,其中3999个字符设置为最大值,因此很难发生截断)
public class ScriptMain : UserComponent
{
public override void CreateNewOutputRows()
{
string directory = Variables.LDAPConnection;
string filter = Variables.LDAPFilter;
string[] desiredAttributes = { "memberOf",
"displayname"
};
using (DirectoryEntry searchRoot = new DirectoryEntry(directory))
using (DirectorySearcher searcher = new DirectorySearcher(searchRoot, filter, desiredAttributes))
{
searcher.PageSize = 100;
searcher.SearchScope = SearchScope.Subtree;
searcher.ReferralChasing = ReferralChasingOption.All;
using (SearchResultCollection results = searcher.FindAll())
{
foreach (SearchResult result in results)
{
Output0Buffer.AddRow();
if (result.Properties["memberOf"] != null && result.Properties["memberOf"].Count > 0)
{
Output0Buffer.memberOf= result.Properties["memberOf"][0].ToString();
}
if (result.Properties["displayname"] != null && result.Properties["displayname"].Count > 0)
{
Output0Buffer.displayname = result.Properties["displayname"][0].ToString();
}
}
}
}
Output0Buffer.SetEndOfRowset();
}
}
ps我不太了解C#...
答案 0 :(得分:1)
您只使用display
属性中的第一条记录:
!important
memberOf
是一个数组。因此,您必须遍历该数组并获取每个值。