【问题标题】:c# DirectoryEntry InvokeSet HomeDirectory and HomeDrive, errorsc# DirectoryEntry InvokeSet HomeDirectory 和 HomeDrive,错误
【发布时间】:2011-09-26 20:50:18
【问题描述】:

我正在尝试为指定 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;
}

【问题讨论】:

标签: c# active-directory directoryentry


【解决方案1】:

也没有理由调用 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(); 
} 

【讨论】:

【解决方案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();
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多