我正在尝试修改指定OU中每个AD用户的“个人资料/主目录/家庭云端硬盘”设置,
我有一些非常基本的代码可以实现这一壮举,但却引发了以下异常:
请求的操作不满足一个或多个约束 与对象的类相关联。
有没有人遇到过这个问题?如果有的话,有办法解决这个问题吗?
谢谢。
DirectoryEntry Entry = new DirectoryEntry("LDAP://OU=Company,DC=corp,DC=Placeholder,DC=com", null, null, AuthenticationTypes.Secure);
DirectorySearcher Searcher = new DirectorySearcher(Entry);
Searcher.SearchScope = SearchScope.Subtree;
Searcher.PropertiesToLoad.Add("sAMAccountName");
Searcher.Filter = "(&(objectClass=user)(objectCategory=person))";
foreach (SearchResult AdObj in Searcher.FindAll())
{
Entry.InvokeSet("HomeDirectory", @"\\winfileserver\" + Convert.ToString(AdObj.Properties["sAMAccountName"][0]));
Entry.InvokeSet("HomeDrive", "H");
Entry.CommitChanges();
}
catch (Exception ex)
{
richTextBox1.Text += ex.Message;
}
答案 0 :(得分:5)
也没有理由调用InvokeSet。这是执行此操作的正确方法:
foreach (SearchResult AdObj in Searcher.FindAll()) {
DirectoryEntry user = AdObj.GetDirectoryEntry();
user.Properties["HomeDirectory"].Value = @"\\winfileserver\" + Convert.ToString(AdObj.Properties["sAMAccountName"][0]);
user.Properties["HomeDrive"].Value = "H";
user.CommitChanges();
}
答案 1 :(得分:2)
看起来你正在使用Entry
指向你的目录根目录,而不是你找到的对象,这就是呼叫失败的原因。
我相信你可以将你的foreach循环更改为:
foreach (SearchResult AdObj in Searcher.FindAll()) {
DirectoryEntry user = AdObj.GetDirectoryEntry();
user.InvokeSet("HomeDirectory", @"\\winfileserver\" + Convert.ToString(AdObj.Properties["sAMAccountName"][0]));
user.InvokeSet("HomeDrive", "H");
user.CommitChanges();
}