none
PowerShell

    Вопрос

  • Здравствуйте! и Вновь я с вопросом.

    Есть переменная, которая выдает ряд значений по строкам, ну к примеру:

    $string = Get-ADOrganizationalUnit -Filter "name -like 'Отдел'"

    Вывод этой переменной примерно следующий:

    $string.DistinguishedName

    OU=Отдел Зажиточных Рож,OU=Больше денег Шире харя,OU=УолСтрит,OU=Пользаки,DC=domain,DC=local

    OU=[21] Отдел Зажиточных Рож,OU=03 Больше денег Шире харя [3],OU=\\\\domain.local\\nas [2],OU=доступ к файлам[2],OU=Группы доступа,DC=domain,DC=local

    Так как, OUшек с таким содержанием очень много, то хотелось бы отфильтровать по символам. Например если строка с указанной OU содержит символы [], то такую строку не выводить. 

    Возможно ли это как то оформить синтаксисом?

    Заранее спасибо.

    21 сентября 2018 г. 12:47

Ответы

  • Get-ADOrganizationalUnit -Filter "name -like 'Отдел'" | where {$_.DistinguishedName -notmatch '\[.+\]'}



    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 21 сентября 2018 г. 12:51
    • Помечено в качестве ответа ReMCatcheR 21 сентября 2018 г. 12:57
    21 сентября 2018 г. 12:51
    Модератор
  • DO {
        Write-Host "Выберите домен:" -ForegroundColor Green
        Write-Host "1. domain.local" -ForegroundColor Cyan
        Write-Host "2. child1.domain.local" -ForegroundColor Cyan
        Write-Host "3. child2.domain.local" -ForegroundColor Cyan
        Write-Host "4. Выход" -ForegroundColor Cyan
    
        $choise = Read-Host "Выберите действие"
    
        switch ($choise) {
            #Работа с доменом domain.local
            1. {
                Write-Host "Выбран домен domain.local" -ForegroundColor Green
                DO {
                    Write-Host "1. Создать учетную запись пользователя" -ForegroundColor Cyan
                    Write-Host "2. Дополнительные манипуляции с определенной учетной записью" -ForegroundColor Cyan
                    Write-Host "3. Вернуться к выбору доменов" -ForegroundColor Cyan
                    Write-Host "4. Выход" -ForegroundColor Cyan
                    $choise = Read-Host "Выберите действие" 
        
                    switch ($choise) {
                        
                        1. {'...'}
                        2. {
                            $usr = Read-Host "Введите полностью ФИО сотрудника, пример: Иванов Иван Иванович"
                            DO {
                                Write-Host "1. Заблокировать учетную запись пользователя" -ForegroundColor Cyan
                                Write-Host "2. Переместить учетную запись пользвателя в OU=_Уволенные" -ForegroundColor Cyan
                                Write-Host "3. Скрыть пользователя из Адресной книги" -ForegroundColor Cyan
                                Write-Host "4. Показать верную информацию о УЗ пользователя" -ForegroundColor Cyan
                                Write-Host "5. Вернуться к предыдущему меню" -ForegroundColor Cyan
                                $choise = Read-Host "Выберите действие"
                                switch ($choise) {
                                    1. {'...'}                                     
                                    2. {'...'}
                                    3. {'...'}
                                    4. {'...'}
                                }
                            } while ($choise -ne 5)
                        }
                        4. {Exit}
                    }
                } while ($choise -ne 3)
            }
            2. {'...'}
            3. {'...'}
        }
    } While ($choise -ne 4)

    P.S. нормальное форматирование выглядит как то так, и когда оно есть искать логические затыки намного проще

    P.S.S. Если у вас набор функций для разных доменов одинаков то верхнее меню не имеет смысла, вам просто нужно значения домена после первого выбора сохранить в переменную (в зависимости от выбора) и далее использовать эту переменную


    The opinion expressed by me is not an official position of Microsoft



    • Изменено Vector BCOModerator 21 сентября 2018 г. 14:41
    • Помечено в качестве ответа ReMCatcheR 21 сентября 2018 г. 14:47
    21 сентября 2018 г. 14:38
    Модератор

Все ответы

  • Get-ADOrganizationalUnit -Filter "name -like 'Отдел'" | where {$_.DistinguishedName -notmatch '\[.+\]'}



    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 21 сентября 2018 г. 12:51
    • Помечено в качестве ответа ReMCatcheR 21 сентября 2018 г. 12:57
    21 сентября 2018 г. 12:51
    Модератор
  • Гениально, спасибо )))
    21 сентября 2018 г. 12:57
  • ReMCatcheR, вы бы как нить более информативно чтоль назвали свои топики, это ваш 3й пост озаглавленный лаконичным "Powershell" только на 1й страничке Scripting ветки форума. Например - "Экранирование спец символов в регулярных выражениях Powershell"

    Большинство вопросов в ветке скриптинг, сурпрыз-сурпрыз, таки так или иначе касаются повершела :-)

    21 сентября 2018 г. 13:18
  • Я же самоучка по powershell'y и такую терминологию не изучал. Но совет приму во внимание. Спасибо.

    Ну раз уже тема продолжилась, может подскажите еще такую вещь:

    DO {
    Write-Host "Выберите домен:" -ForegroundColor Green
    Write-Host "1. domain.local" -ForegroundColor Cyan
    Write-Host "2. child1.domain.local" -ForegroundColor Cyan
    Write-Host "3. child2.domain.local" -ForegroundColor Cyan
    
    $choise = Read-Host "Выберите действие"
    
    switch ($choise) {
    #Работа с доменом domain.local
        1. {
        Write-Host "Выбран домен domain.local" -ForegroundColor Green
    DO {
     Write-Host "1. Создать учетную запись пользователя" -ForegroundColor Cyan
     Write-Host "2. Дополнительные манипуляции с определенной учетной записью" -ForegroundColor Cyan
     Write-Host "3. Вернуться к выбору доменов" -ForegroundColor Cyan
     Write-Host "4. Выход" -ForegroundColor Cyan
     $choise = Read-Host "Выберите действие" 
        
     switch ($choise) 
                    {
                        
                        1. {...}
                        2. {
                            $usr = Read-Host "Введите полностью ФИО сотрудника, пример: Иванов Иван Иванович"
                            DO {
                            Write-Host "1. Заблокировать учетную запись пользователя" -ForegroundColor Cyan
                            Write-Host "2. Переместить учетную запись пользвателя в OU=_Уволенные" -ForegroundColor Cyan
                            Write-Host "3. Скрыть пользователя из Адресной книги" -ForegroundColor Cyan
                            Write-Host "4. Показать верную информацию о УЗ пользователя" -ForegroundColor Cyan
                            Write-Host "5. Вернуться к предыдущему меню" -ForegroundColor Cyan
                            $choise = Read-Host "Выберите действие"
                                    switch ($choise) 
                                                    {
                                                         1.{...}                                     
                                                         2. {...}
                                                         3. {...}
                                                         4. {...}
                                                    }
                                }
                                while ($choise -ne 5)
                          }
                        4. {Exit}
                    }
       }
        while ($choise -ne 3)
            }
      2. {...}
      3. {...}
      }
    } While (1,2,3 -notcontains $choise)

    Ситуация происходит внутри первого скриптблока. Выбирая пункт 2. Дополнительные манипуляции с определенной учетной записью, там видим пункт 5. Вернуться к предыдущему меню. И все хорошо, возврат к меню на уровень выше происходит корректно, а вот далее пункт 3 Вернуться к выбору доменов, просто закрывает выполнение скрипта. Почему так? что не так оформлено? Подскажите, и желательно поясните почему так?

    21 сентября 2018 г. 13:46
  • без нормального форматирования сложно читать текст и искать где у вас заканчивается один do{} while () и начинается другой но предположу что выход происходит по тому что $choice -eq 3 в последнем условии.

    уберете 3 скорее всего перестанет выходить.

    п.с. тут многие самоучки


    The opinion expressed by me is not an official position of Microsoft

    21 сентября 2018 г. 13:51
    Модератор
  • одна переменная на все случае жизни - это оригинально...
    21 сентября 2018 г. 14:00
  • Да, скрипт перестал закрываться, но не происходит переход на предыдущее меню (к выбору доменов).

    Как правильно отформатировать текст тут? я просто указал ту часть которая вызывает у меня затруднения. По скриптблокам все корректно.

    21 сентября 2018 г. 14:02
  • Когда много разных переменных, начинается путаница. Тем более переменная $choise в каждом скриптблоке задается по новой.
    21 сентября 2018 г. 14:06
  • Когда много разных переменных, начинается путаница. Тем более переменная $choise в каждом скриптблоке задается по новой.
    это если правильно скрипт написан, но в случае ошибок возможны неочевидные проблемы :)

    The opinion expressed by me is not an official position of Microsoft

    21 сентября 2018 г. 14:27
    Модератор
  • Да, скрипт перестал закрываться, но не происходит переход на предыдущее меню (к выбору доменов).

    Как правильно отформатировать текст тут? я просто указал ту часть которая вызывает у меня затруднения. По скриптблокам все корректно.

    в веб редакторе это делается пробелами, но это гиблая практика. В powershell_ise или любом другом редакторе вы выставляете правильно форматирование и потом копируете сюда убирая то что не нужно

    The opinion expressed by me is not an official position of Microsoft

    21 сентября 2018 г. 14:29
    Модератор
  •  Тем более переменная $choise в каждом скриптблоке задается по новой.

    вот вы и ответили... 

    у вас выход из первой и второй вложенности - 3

    21 сентября 2018 г. 14:30
  • DO {
        Write-Host "Выберите домен:" -ForegroundColor Green
        Write-Host "1. domain.local" -ForegroundColor Cyan
        Write-Host "2. child1.domain.local" -ForegroundColor Cyan
        Write-Host "3. child2.domain.local" -ForegroundColor Cyan
        Write-Host "4. Выход" -ForegroundColor Cyan
    
        $choise = Read-Host "Выберите действие"
    
        switch ($choise) {
            #Работа с доменом domain.local
            1. {
                Write-Host "Выбран домен domain.local" -ForegroundColor Green
                DO {
                    Write-Host "1. Создать учетную запись пользователя" -ForegroundColor Cyan
                    Write-Host "2. Дополнительные манипуляции с определенной учетной записью" -ForegroundColor Cyan
                    Write-Host "3. Вернуться к выбору доменов" -ForegroundColor Cyan
                    Write-Host "4. Выход" -ForegroundColor Cyan
                    $choise = Read-Host "Выберите действие" 
        
                    switch ($choise) {
                        
                        1. {'...'}
                        2. {
                            $usr = Read-Host "Введите полностью ФИО сотрудника, пример: Иванов Иван Иванович"
                            DO {
                                Write-Host "1. Заблокировать учетную запись пользователя" -ForegroundColor Cyan
                                Write-Host "2. Переместить учетную запись пользвателя в OU=_Уволенные" -ForegroundColor Cyan
                                Write-Host "3. Скрыть пользователя из Адресной книги" -ForegroundColor Cyan
                                Write-Host "4. Показать верную информацию о УЗ пользователя" -ForegroundColor Cyan
                                Write-Host "5. Вернуться к предыдущему меню" -ForegroundColor Cyan
                                $choise = Read-Host "Выберите действие"
                                switch ($choise) {
                                    1. {'...'}                                     
                                    2. {'...'}
                                    3. {'...'}
                                    4. {'...'}
                                }
                            } while ($choise -ne 5)
                        }
                        4. {Exit}
                    }
                } while ($choise -ne 3)
            }
            2. {'...'}
            3. {'...'}
        }
    } While ($choise -ne 4)

    P.S. нормальное форматирование выглядит как то так, и когда оно есть искать логические затыки намного проще

    P.S.S. Если у вас набор функций для разных доменов одинаков то верхнее меню не имеет смысла, вам просто нужно значения домена после первого выбора сохранить в переменную (в зависимости от выбора) и далее использовать эту переменную


    The opinion expressed by me is not an official position of Microsoft



    • Изменено Vector BCOModerator 21 сентября 2018 г. 14:41
    • Помечено в качестве ответа ReMCatcheR 21 сентября 2018 г. 14:47
    21 сентября 2018 г. 14:38
    Модератор
  • Спасибо, помогло!

    P.S. нормальное форматирование выглядит как то так, и когда оно есть искать логические затыки намного проще - Принял, на будущее буду иметь ввиду

    P.S.S. Если у вас набор функций для разных доменов одинаков то верхнее меню не имеет смысла, вам просто нужно значения домена после первого выбора сохранить в переменную (в зависимости от выбора) и далее использовать эту переменную - По большей части одинаков, но есть отличия. Плюс есть административные тонкости которые не позволяют так сделать. Уже пробовали, для тех кто будет использовать этот скрипт, такой вариант сложный. Поэтому максимально понятно и наглядно его пытаюсь сделать.

    21 сентября 2018 г. 14:51