我正在创建一个需要访问Active Directory的SSIS包。我创建了一个ADO.NET连接并编写了一个选择LDAP查询以撤回记录(见下文)。我能够成功检索数据,但其中一个Active Directory属性返回System.Object []而不是我想要的部门号。有没有办法使用查询成功将System.Object转换为真实数据?提前谢谢。
示例查询:
SELECT department, departmentnumber, sAMAccountName
FROM 'LDAP://example.com' WHERE objectClass='User'
结果:
|department |departmentnumber |sAMAccountName|
|Hollywood |System.Object[] |ceastwood |
更新:在我的研究之后,我将补充说,如果它返回System.Object,我不相信这个LDAP SQL查询是可以使用的。我找到了许多使用脚本任务执行类似操作的很好的例子HERE
我创建了一个控制台应用程序,并将其构建为将我的Active Directory数据直接插入SQL。我建议按照Stack Over Flow上的文章进行操作。他们帮助我完成了这项任务,尽管它不是我想要的方式。
答案 0 :(得分:1)
在进一步阅读之前,请确保可以将对象[]解析为字符串[]。
为了便于在我们的环境中使用,我将分享一个示例方法,说明如何将memberOf
属性的输出从object []转换为string []:
object[] membership = user.Properties["MemberOf"].Value as object[];
if (membership != null)
{
string[] roles = Array.ConvertAll<object, string>(membership, convertObjectToString);
if (roles != null)
{
foreach (string role in roles)
LogInformation.log("Role " + role);
}
else
LogInformation.log("Member Of not found!");
}
然而,convertObjectToString()是一个静态方法,如下所述:
private static string convertObjectToString(object obj)
{
return (obj == null) ? string.Empty : obj.ToString();
}