Ejemplo n.º 1
0
        // Создание дерева подразделений домена
        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();
            }
        }