Использование powershell для отображения списка пользователей AD и создание интерактивного меню для удаления конкретного пользователя - PullRequest
0 голосов
/ 11 ноября 2019

Итак, я хочу использовать powershell, чтобы вывести список всех пользователей ADuse в основное интерактивное меню, чтобы можно было выбрать и удалить конкретного пользователя.

Это то, что я получил до сих пор, и это все пользователи и позволяет мне выбрать конкретный. Но Remove-ADUser -identity $ouEntry (on-line: 18) запускается сразу после запуска сценария и выбирает всех пользователей для удаления, прежде чем я могу выбрать конкретного. Мне нужно, чтобы он работал после того, как я выбрал опцию, и с правильным пользователем. Я искал в меню переключения, но с плохими результатами, так как я не могу встраивать ForEach должным образом.

Ценю всю помощь. Я также открыт для альтернативных решений

Clear-Host

$ouCounter = 1
$MenuArray = @()

$DomainName = ($env:USERDNSDOMAIN).split('.')[0]
$Tld = ($env:USERDNSDOMAIN).split('.')[1]

Write-Host "`nChoose the user you want to delete"



foreach ($ouEntry in ((Get-ADUser -SearchBase "DC=$DomainName,DC=$Tld" -Filter *).name))
{ 
    $("   "+$ouCounter+".`t"+$ouEntry) 
    $ouCounter++ 
    $MenuArray +=  $ouEntry + " was removed"
    $MenuArray += Remove-ADUser -identity $ouEntry
}

do
{ [int]$menuSelection = Read-Host "`n Enter Option Number"}
until ([int]$menuSelection -le $ouCounter -1)

$MenuArray[ $menuSelection-1] 

Вывод

Choose the user you want to delete
   1.   Administrator
   2.   Guest
   3.   user1
   4.   user2
   5.   user3
   6.   user4
   7.   user5
   8.   user6
   9.   Jon Snow

 Enter Option Number: 

Предыдущая ссылка: Создание динамического меню в Powershell

1 Ответ

0 голосов
/ 11 ноября 2019

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

Ниже код сначала получает пользователей в массив один раз и создает List объект из этого.
Причина использования объекта List в том, что с этим легко удалить элемент (в отличие от использования массива).

$DomainName = ($env:USERDNSDOMAIN).Split('.')[0]
$Tld = ($env:USERDNSDOMAIN).Split('.')[1]

# get an array of users in the given OU, sorted on the Name property
$users = Get-ADUser -SearchBase "DC=$DomainName,DC=$Tld" -Filter * | Sort-Object Name

# store them in a List object for easy removal
$list = [System.Collections.Generic.List[object]]::new()
$list.AddRange($users)

# now start an endless loop for the menu handling
while ($true) { 
    Clear-Host
    # loop through the users list and build the menu
    Write-Host "`r`nChoose the user you want to delete.  Press Q to quit." -ForegroundColor Yellow
    $index = 1
    $list | ForEach-Object { "    {0}.`t{1}" -f $index++, $_.Name }

    $menuSelection = Read-Host "`r`nEnter Option Number."
    # if the user presses 'Q', exit the loop
    if ($menuSelection -eq 'Q') { break }

    # here remove the chosen user if a valid input was given
    if ([int]::TryParse($menuSelection, [ref]$index)) {
        if ($index -gt 0 -and $index -le $list.Count) {
            $userToDelete = $list[$index - 1]
            Write-Host "Removing user $($userToDelete.Name)" -ForegroundColor Cyan
            Remove-ADUser -Identity $userToDelete.DistinguishedName
            # remove the user from the list
            $list.RemoveAt($index - 1)
        }
    }
    # add a little pause and start over again
    Start-Sleep -Seconds 1
}

Надеюсь, что это поможет

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