Авторизация



Теги сайта



0х0000007b 1c access control list acl activation active directory ad roles add route adexplorer apache authentication to zabbix bare metal recovery bg zsh bicycle books bruteforce c admin ccna centos centos packet change net adapter name chap chkrootkit chmod cisco clipboard cmd configuring cpu cores cron crontab csc cut cvsup cvsup-without-gui db dev null 2 1 dhcp dhcp reservation disable ipv6 diskpart dism dns domain naming master domain roles download download powershell enable routing on windows enabled end-system doc english english language esx eventlog exe file associations fail2ban fastest_cvsup fedora fg zsh formatdatabase freebsd fsmo get-aduser group policy management hardware https hyper-v idioms iis iperf iptables iscsi jobs kernel panic ldap ldap аутентификация zabbix limit lingualeo linux malware posix mcitp mcsa mcse memory check microsoft mod_ssl mount mssql mysql mysql user password netcache network network config network diagram network document network load balance cluster network scripts nginx nlb num lock numlock openssl pap partition pdc permissions php pipeline pkg_version ports upgrade portupgrade posix powershell ppp pwdlastset rdp reg add regedit registry remote enable restrictions reverse proxy rhel rid rope jumping bridge мост прыжок высота route add route freebsd router switch doc routing protocol rpm sc sc sdset sc sdshow schema scope script output secure web security seize role service permissions services set dns servers set ip address sftp shell script show variables snmp sound scheme sounds speed ssh standard-supfile subinacl supfile switch switchport sync syncronization task sсheduler tempdb topology map transfer role tripplite monitoring tweaks unix user must change password at next logon utf8 vim vlan vmware w32tm web windows windows 2003 r2 windows 2008 r2 windows administrative share windows firewall windows server windows server 2012 windows server backup windows service permissions windows пингалка winre wsus xargs yum zabbix zabbix external check zabbix ldap authentication zsh автоматическое обновление портов freebsd автономные файлы активация английский язык ассоциации файлов windows база данных безопасность active directory буфер вело велосипед видео включение роутинга в windows внешняя проверка zabbix вредоносное программное обеспечение posix документация сети задание двумерного массива захват ролей dc звуки звуковая схема идиомы иероглифы киев кодировка командная строка конфигурация сети маршрутизация маршруты в freebsd маршруты в redhat linux область ограничения windows основные команды отключение административных ресурсов пакеты centos перевод передача ролей dc перенос планировщик задач покатушки полет над днепром проблемы кодировки протокол путь развития в it разрешения служб windows регистрируем cmd скриптом недоступность хоста реестр резервирование ip скриптом роли домена русские символы синхронизация скачать скачать powershell скачать книгу скорость сети списки контроля доступа тарзанка твики фоновые процессы цикл mssql

Главная страница Microsoft POWERSHELL Скрипт PowerShell для сброса пароля в AD
Скрипт PowerShell для сброса пароля в AD Печать

Скрипт PowerShell, позволяющий обозначить домен и учетные данные для подключения, сбросить пароль учетной записи Active Directory и разблокировать ее, а также отобразить примененную к учетной записи политику паролей PSO в домене.

Function Global:Reset-ADAccountPassword ([parameter(Mandatory=$true)][string]$Name,$DistinguishedNameSearchBase,$Credential,[switch]$ShowPasswordPolicy,$Server) {
# $ShowPasswordPolicy = [bool]$false (можно использовать булево значение вместо переключателя switch)

    Write-Host  
    $error.Clear | Out-Null
    Write-Host 'Original and comments: http://vam.in.ua/index.php/it/25-ms-powershell/145-powershell-ad-account-password-reset-script.html'  
    Write-Host 'Feedback: http://vam.in.ua/index.php/contacts/2-admins/1-aleksey.html'
    Remove-Variable pso,psoError,adAcc,passwd,commonError,newADpass,mess,fdomain,getADuserVar -ErrorAction SilentlyContinue

    #--- Если указаны учетные данные
    if ($Credential) {
        $passwd = Get-Credential -Credential $Credential -ErrorVariable commonError
        if (!$passwd) {Break}
    }

    #--- Если не указано имя учетной записи вызвать исключение
    if (!$name) {        
        Write-Error -Message 'Account name is not defined'
        Remove-Variable passwd,Credential -ErrorAction SilentlyContinue
        Break
    }

    #--- Импортируем модуль AD
    Import-Module -Name ActiveDirectory -ErrorVariable commonError

    #--- Если ошибка то прервать функцию
    if ($commonError) {
        Remove-Variable passwd,Credential -ErrorAction SilentlyContinue
        Break
    }

    #--- Если переменная Server не определена, то подставить ей значение текущего контроллера домена
    if ($Server) {
        if ($Credential) {
            $Server = Get-ADDomainController -Credential $passwd -Server $Server -ErrorVariable commonError
            $Server = $Server.HostName
        } else {
            $Server = Get-ADDomainController -Server $Server -ErrorVariable commonError
            $Server = $Server.HostName
        }
    } else {
        if ($Credential) {
            $Server = Get-ADDomainController -Credential $passwd -ErrorVariable commonError
            $Server = $Server.HostName
        } else {
            $Server = Get-ADDomainController -ErrorVariable commonError            
            $Server = $Server.HostName
        }
    }

    # Если произошла общая ошибка - прервать функцию
    if ($commonError) {
        Remove-Variable passwd,Credential -ErrorAction SilentlyContinue
        Break
    }

    #--- Если переменная DistinguishedNameSearchBase не определена, то подставить ей значение текущего домена
    if (!$DistinguishedNameSearchBase) {
        if ($Credential) {
            $fdomain = Get-ADDomain -Credential $passwd -Server $Server -ErrorVariable commonError
        } else {
            $fdomain = Get-ADDomain -Server $Server -ErrorVariable commonError
        }        
    } else {
        if ($Credential) {
            $fdomain = Get-ADObject -Server $Server -Identity $DistinguishedNameSearchBase -Credential $passwd -ErrorVariable commonError
        } else {
            $fdomain = Get-ADObject -Server $Server -Identity $DistinguishedNameSearchBase -ErrorVariable commonError
        }
    }

    # Если произошла общая ошибка (например неверные учетные данные) - прервать функцию
    if ($commonError) {
        Remove-Variable passwd,Credential -ErrorAction SilentlyContinue
        Break
    }

    #--- Загоняем в переменную adAcc объект пользователя по его логину
    if ($Credential) {
        $adAcc = (Get-ADUser -Server $Server -SearchBase $fdomain -Credential $passwd -Filter {samAccountName -eq $name} -ErrorVariable commonError)
    } else {
        $adAcc = (Get-ADUser -Server $Server -SearchBase $fdomain -Filter {samAccountName -eq $name} -ErrorVariable commonError)
    }

    #--- Если ошибка - прервать функцию
    if ($commonError) {
        Remove-Variable passwd,Credential -ErrorAction SilentlyContinue
        Break
    }

    #--- Если учетная запись не определена - прервать функцию, иначе - блок кода 
    if (!$adAcc) {
        $mess = 'Account "' + $name + '" was not find on ' + $fdomain + ' at server ' + $Server
        Write-Error $mess
        Remove-Variable passwd,Credential -ErrorAction SilentlyContinue
        Break        
    } 
    else {
        Write-Host  
        #--- Выведем на экран информацию об аккаунте, с которым хотим работать
        Write-Host '---=== INFORMATION ABOUT ACCOUNT ===---'
        $adAcc | Format-List
        #--- Проказать примененную к аккаунту политику паролей, если требуется
        if ($ShowPasswordPolicy.IsPresent) {
            if ($Credential) {
                $pso = Get-ADUserResultantPasswordPolicy -Server $Server -Identity $adAcc -ErrorVariable psoError -Credential $passwd
            } else {
                $pso = Get-ADUserResultantPasswordPolicy -Server $Server -Identity $adAcc -ErrorVariable psoError
            }

            Write-Host '---=== PASSWORD POLICY ===---'
            if (($pso) -and (!$psoError)) {
                $pso | Format-List
            } else {
                $mess = 'Password Settings Object is not defined for account "' + $name + '"'
                Write-Host $mess
            }
            Write-Host  
            Pause
            Write-Host  
        }
        #--- Формируем приглашение ввести пароль для учетной записи в переменной
        $mess = 'Please type new password for account   "' + $name + '"'
        #--- Интерактивно предложим ввести новый пароль
        $newADpass = Read-Host $mess -AsSecureString         
        #--- Сбросим пароль учетной записи в AD
        if ($Credential) {
            Set-ADAccountPassword -Server $Server -Credential $passwd -Identity $adAcc -Reset -NewPassword $newADpass -ErrorVariable commonError
        } else {
            Set-ADAccountPassword -Server $Server -Identity $adAcc -Reset -NewPassword $newADpass -ErrorVariable commonError
        }
    
        #--- Если ошибок при сбросе небыло, то разблокировать учетную запись и указать на необходимость сменить пароль
        if (!$commonError) { 
            Write-Host  

            #--- Необходимость изменить пароль при первом входе
            if ($Credential) {
                Set-ADUser $adAcc -ChangePasswordAtLogon $true -Server $Server -Credential $passwd
            } else {
                Set-ADUser $adAcc -ChangePasswordAtLogon $true -Server $Server
            }

            $mess = 'Password was successfully reset for account "' + $name + '"'
            Write-Host $mess

            #--- Разблокируем учетную запись 
            if ($Credential) {
                Unlock-ADAccount $adAcc -ErrorVariable commonError -Server $Server -Credential $passwd
            } else {
                Unlock-ADAccount $adAcc -ErrorVariable commonError -Server $Server
            }

            #--- Если разблокировалась без ошибок - поздравить
            if (!$commonError) {
                Write-Host  
                Write-Host 'Account was successfully unlocked'
                Write-Host  
            }

        }         
    }
    
    Remove-Variable passwd,Credential -ErrorAction SilentlyContinue
}

Применение:

Reset-ADAccountPassword [-Name <string>] [-DistinguishedNameSearchBase <string>] [-Credential <PSCredential>] [-ShowPasswordPolicy ] [-Server <string>]

 

PS C:\> Reset-ADAccountPassword domainuser # сбросит пароль учетной записи domainuser и разблокирует ее. Необходимо чтобы командлет запускался внутри домена от имени пользователя имеющего соответствующие права
PS C:\> Reset-ADAccountPassword -Name domainuser -Server dc1 -DistinguishedNameSearchBase "OU=managers,DC=domain,DC=local" -Credential domain\admin # сбросит пароль и разблокирует учетную запись domainuser, которая находится в подразделении managers домена domain.local на контроллере домена dc1. Для выполнения этой операции будет запрошен пароль доменной учетной записи admin
PS C:\> Reset-ADAccountPassword -Name domainuser -ShowPasswordPolicy # сбросит пароль учетной записи domainuser и разблокирует ее. Перед приглашением ввести новый пароль будет отображена политика паролей PSO для этой учетной записи

 

Добавляем скрипт в профиль и функция Reset-ADAccountPassword будет доступна также как и все остальные командлеты. Как работать с профилями смотрите в моей статье (ссылка).

Для того чтобы скрипт нормально отработал, необходимо чтобы был установлен родной модуль PowerShell ActiveDirectory. Он входит в набор Remote Server Administration Tools (RSAT) [Remote Server Administration Tools/Role Administration Tools/AD DS and AD LDS Tools/Active Directory module for Windows PowerShell] и автоматически ставится на контроллерах домена вместе с Active Directory.

Комментарии:

 

КОММЕНТАРИИ 

 
#1 Dev_LC 13.12.2012 14:09
Один из первых моих скриптов PS, размером от 50 строк кода.
Коменты и замечания по оптимизации приветствуются!
Цитировать
 

Добавить комментарий

Чтобы иметь дополнительные опции редактирования, возможность оценивать чужие комментарии и не вводить код Captcha с картинки перед отправкой сообщения, войдите под своим аккаунтом или зарегистрируйтесь.

Защитный код
Обновить

Главная страница Microsoft POWERSHELL Скрипт PowerShell для сброса пароля в AD