Команда для разблокировки заблокированного пользователя домена - PullRequest
0 голосов
/ 23 июня 2018

Я использовал их, чтобы вывести список заблокированных пользователей в моем домене и предложить мне ввести имя samaccountname, чтобы разблокировать нужного: Я сделал это с 3 файла.

первый - это ps1, чтобы перечислить их все

    import-module activedirectory
    search-adaccount -lockedout | select  name, samaccountname, OU

второй - это другой файл PS1:

    $user = Read-Host "Enter user account (SAMACCOUNTNAME) to unlock or press ENTER to refresh list"
    Search-ADAccount -LockedOut | Where {$_.samaccountname -eq $user} | Unlock-ADAccount

и для выполнения вышеуказанных файлов я использую файл .bat:

    :loop
    powershell.exe -ExecutionPolicy Bypass -File c:\ps\lockedlist.ps1
    powershell.exe -ExecutionPolicy Bypass -File c:\ps\unlock.ps1
    cls
    goto loop

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

НО проблема в том, что когда я хочу сделать это с ОДНЫМ файлом ps1, это не работает. он просто запрашивает имя samaccountname, но не перечисляет его

    import-module activedirectory
    search-adaccount -lockedout | select  name, samaccountname, OU
    $user = Read-Host "Enter user account (SAMACCOUNTNAME) to unlock or press ENTER to refresh list"
    Search-ADAccount -LockedOut | Where {$_.samaccountname -eq $user} | Unlock-ADAccount

я знаю .bat файл будет почти таким же ...

спасибо всем, кто читает и помогает.

1 Ответ

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

Powershell всегда пытается оптимизировать вывод, который он дает для вас. Таким образом, порядок вывода может быть не таким, как вы ожидаете от команд, которые вы используете в скрипте. Если возможно, он объединит выходные данные, чтобы сделать их более читабельными, особенно если это объекты одного типа. Чтобы это исправить, вы можете использовать командлет формата, например Format-Table par.

Search-ADAccount -LockedOut | 
    Select-Object -Property Name, sAMAccountName, DistinguishedName |
        Format-Table
$user = Read-Host -Prompt 'Enter user account (SAMACCOUNTNAME) to unlock or press ENTER to refresh list'
Search-ADAccount -LockedOut | 
    Where-Object -FilterScript {$_.samaccountname -eq $user} | 
        Unlock-ADAccount

По крайней мере, это работало в моей среде. И кстати: начиная с версии 3 Powershell вам больше не нужно явно импортировать модули. Они будут импортированы автоматически. Лучше было бы использовать # Требуется оператор наподобие #Requires -Modules activedirectory в верхней части скрипта. Это даже помешает запуску сценария, если не установлен модуль активного каталога

...