Запрос члена (AD) с Powershell - PullRequest
0 голосов
/ 01 июня 2018

У меня есть простое меню, которое позволяет вам выбирать задачи для пользователя в Active Directory.Одна из задач, которую я хочу выполнить, - показать членство в группе пользователей.Для этого я использую приведенный ниже код.Моя проблема заключается в том, что в разделе DO, вариант 3, который отображает членство в группе, вывод при выводе меню кажется пустым.Если я запускаю ТОЛЬКО выбор кода из этой опции, он работает просто отлично.

function Show-Menu
{
    param (
        [string]$Title = 'My Menu'
    )
    Clear-Host
    Write-Host "================ $Title ================"

    Write-Host "1: Unlock User"
    Write-Host "2: Disable User"
    Write-Host "3: Show Groups"
    Write-Host "Q: Press 'Q' to quit."
}


cls

#User Lookup
write-host 'First, lets look up the user you want to work with'
$user = Read-Host 'Enter the name of the user you want to search for!'
$w = "*"
$search = $w + $user + $w
Get-ADUser -F 'name -like $search' | FT SamAccountName -A

#User Selection
$target_user = Read-Host 'Which user do you want to work with?'
cls

do
 {
     Show-Menu
     $selection = Read-Host "Please make a selection"
     switch ($selection)
     {
           '1' {unlock-ADAccount -Identity $target_user} 
           '2' {Disabled-ADAccount -Identity $target_user} 
           '3' {Get-ADPrincipalGroupMembership $target_user | select name} 

     }
     pause
 }
 until ($selection -eq 'q')
 clear

1 Ответ

0 голосов
/ 01 июня 2018

Если вы остановите скрипт, вы увидите вывод ваших вызовов опции 3.

Следующие работы:

'3' {Get-ADPrincipalGroupMembership $target_user | select name | Out-Host }

или несколько удивительно

'3' {Get-ADPrincipalGroupMembership $target_user | select name | ft }

Проблема в том, что select-object записывает в stdout и pause пишет в консоль, что является двумя разными и конфликтующими выходами (если stdout идет в консоль).Командлет GroupMembership производит вывод в stdout, но Powershell буферизует stdout, поскольку он обнаружил вывод на консоль через Show-Menu.Вероятно, он сначала покажет пару КиБ вывода консоли в прямом режиме, прежде чем отобразит косвенный вывод на консоль посредством записи stdout.Или он покажет буферизованный вывод stdout, когда скрипт завершится, и убьет прямой вывод в консольный буфер, и сбросит записи stdout.

Итак, решение здесь заключается в прямой записи в Host сам.Конечно, это имеет недостаток, заключающийся в невозможности перенаправить вывод в потоке stdout в другой сценарий.

Аналогичное обсуждение в SpiceWorks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...