// Создание дерева подразделений домена private void CreateDomainOUTree() { ReadOnlyCollection <DomainTreeItem> items; DomainOUTreeView.ItemsSource = null; string errorMsg = ""; new Thread(() => { items = AsyncDataProvider.GetDomainOUTree(_sessionAD, ref errorMsg); Dispatcher.BeginInvoke(new Action(() => { DomainOUTreeView.ItemsSource = items; Binding binding = new Binding(); binding.Source = DomainOUTreeView; // установить в качестве source object значение ElementName binding.Path = new PropertyPath("SelectedItem.Description"); binding.Mode = BindingMode.OneWay; binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; binding.Converter = new SelectOUTreeBtEnableConverter(); BindingOperations.SetBinding(btSelect, Button.IsEnabledProperty, binding); if (!string.IsNullOrWhiteSpace(errorMsg)) { MessageBox.Show(errorMsg, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } else { DomainOUTreeView.Focus(); } })); }).Start(); }
// Нажата кнопка переместить private void btMove_Click(object sender, RoutedEventArgs e) { if (_mode == "move") { MessageBoxResult result = MessageBox.Show("Вы уверены что хотите переместить текущего пользователя в указанное подразделение?", "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.No) { DomainOUTreeView.Focus(); return; } try { DirectorySearcher dirSearcher = new DirectorySearcher(_sessionAD); dirSearcher.SearchScope = SearchScope.Subtree; dirSearcher.Filter = string.Format("(&(objectClass=user)(distinguishedName=" + _distinguishedNameUser + "))"); SearchResult searchResults = dirSearcher.FindOne(); DirectoryEntry theObjectToMove = searchResults.GetDirectoryEntry(); dirSearcher.Filter = string.Format("(&(|(objectClass=organizationalUnit)(objectClass=organization)(cn=Users)(cn=Computers))(distinguishedName=" + ((DomainTreeItem)DomainOUTreeView.SelectedItem).Description + "))"); searchResults = dirSearcher.FindOne(); DirectoryEntry theNewParent = searchResults.GetDirectoryEntry(); theObjectToMove.MoveTo(theNewParent); DialogResult = true; Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); DomainOUTreeView.Focus(); } } if (_mode == "movePC") { MessageBoxResult result = MessageBox.Show("Вы уверены что хотите переместить текущий компьютер в указанное подразделение?", "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.No) { DomainOUTreeView.Focus(); return; } try { DirectorySearcher dirSearcher = new DirectorySearcher(_sessionAD); dirSearcher.SearchScope = SearchScope.Subtree; dirSearcher.Filter = string.Format("(&(objectClass=computer)(distinguishedName=" + _distinguishedNameUser + "))"); SearchResult searchResults = dirSearcher.FindOne(); DirectoryEntry theObjectToMove = searchResults.GetDirectoryEntry(); dirSearcher.Filter = string.Format("(&(|(objectClass=organizationalUnit)(objectClass=organization)(cn=Users)(cn=Computers))(distinguishedName=" + ((DomainTreeItem)DomainOUTreeView.SelectedItem).Description + "))"); searchResults = dirSearcher.FindOne(); DirectoryEntry theNewParent = searchResults.GetDirectoryEntry(); theObjectToMove.MoveTo(theNewParent); DialogResult = true; Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); DomainOUTreeView.Focus(); } } if (_mode == "moveGroup") { MessageBoxResult result = MessageBox.Show("Вы уверены что хотите переместить текущую группу в указанное подразделение?", "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.No) { DomainOUTreeView.Focus(); return; } try { DirectorySearcher dirSearcher = new DirectorySearcher(_sessionAD); dirSearcher.SearchScope = SearchScope.Subtree; dirSearcher.Filter = string.Format("(&(objectClass=group)(distinguishedName=" + _distinguishedNameUser + "))"); SearchResult searchResults = dirSearcher.FindOne(); DirectoryEntry theObjectToMove = searchResults.GetDirectoryEntry(); dirSearcher.Filter = string.Format("(&(|(objectClass=organizationalUnit)(objectClass=organization)(cn=Users)(cn=Computers))(distinguishedName=" + ((DomainTreeItem)DomainOUTreeView.SelectedItem).Description + "))"); searchResults = dirSearcher.FindOne(); DirectoryEntry theNewParent = searchResults.GetDirectoryEntry(); theObjectToMove.MoveTo(theNewParent); DialogResult = true; Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); DomainOUTreeView.Focus(); } } if (_mode == "select") { DialogResult = true; Close(); } if (_mode == "moveListPC") { DialogResult = true; Close(); } }