Перейти к содержимому

Как сделать скрипт для отключения учетных записей пользователей с просроченными паролями.

Отключение учетных записей пользователей с просроченными паролями (пароль не менялся более 100 дней).

<# .SYNOPSIS
    Отключение учетных записей пользователей с просроченными паролями
.DESCRIPTION
    Отключение учетных записей пользователей с просроченными паролями (пароль не менялся более 100 дней).
#>
#╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗#
$Host.UI.RawUI.WindowTitle = "Отключение учетных записей пользователей с просроченными паролями"
#╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝#
[system.gc]::Collect()
#------ Logging section ------#
$fileLocation = (gi $MyInvocation.InvocationName) | ForEach-Object {
    $fileDirectory = "$($_.DirectoryName)\$($_.BaseName)";
    "$fileDirectory\$($_.BaseName)_$('{0:yyyy-MM-dd}'-f(date))";
    if (!(Test-Path "$fileDirectory")) {
        ni "$fileDirectory" -ItemType "directory" | Out-Null
    }
}
$Domain     = "adminbd.ru.ru"
$Sender     = "helpdesk@adminbd.ru.ru"
$smtpserver = "mail.adminbd.ru.ru"
#------ Variables ------#
Import-Module ActiveDirectory
$tAD = 'pwdLastSet','Name','whenCreated','PasswordNeverExpires','PasswordExpired','SamAccountName','mail','lastLogonTimestamp','DistinguishedName','Description','CanonicalName','extensionAttribute15'
$tAD2 = 'whenCreated','Name','SamAccountName','mail',@{n='pwdLastSet';e={[DateTime]::FromFileTime($_.pwdLastSet)}},'PasswordNeverExpires','PasswordExpired',@{n='lastLogonTimestamp';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},'DistinguishedName','Description','CanonicalName','extensionAttribute15'
$OrgUnit = "OU=Locations,DC=adminbd.ru,DC=ru"
$ExceptinOU = "*External*"
$td1 = (Get-Date).adddays(-100)
$td2 = (Get-Date).adddays(-30)
$td1=$td1.ToFileTime()
$DC = "SHR-AD01.adminbd.ru.ru"
$Result = @()
#$addlog = "C:\tmp\result_blok_users_23_06_22.csv"
 
#------ Execution ------#
 
$UserAD = Get-ADUser -SearchBase $OrgUnit -Filter {pwdLastSet -le $td1 -and Enabled -eq "True" -and whenCreated -le $td2 -and PasswordNeverExpires -eq "False"} -Properties $tAD | Select-Object $tAD2 |
    Where-Object    {
        !($(foreach ($u in $ExceptinOU) {$_.CanonicalName -like  $u}) -contains ($True))
    }
#Export-Csv -Path C:\tmp\Useradminbd.ru.csv -Encoding UTF8
 
foreach ($item in $UserAD) {   
    $data = @{"login"=$item.UserPrincipalName}
    $headers = @{"accept" = '*/*'}
    $StatusUrl = (Invoke-WebRequest -Method 'Post' -Uri 'https://adeventhandler.adminbd.ru.ru/User/Deactivation' -Headers $headers -Body ($data | ConvertTo-Json) -ContentType "application/json")
    ForEach-Object {
        $detailed = [ordered]@{
            Login = $item.sAMAccountName
            whenCreated = $item.whenCreated
            pwdLastSet = $item.pwdLastSet
            lastLogonTimestamp = $item.lastLogonTimestamp
            extensionAttribute15 = 'Пароль не менялся более 95 дней'
            StatusUrlCode = $StatusUrl.StatusCode
      }
        Set-aduser -Server $DC -Identity $item.sAMAccountName -Replace @{extensionAttribute15 = 'Пароль не менялся более 95 дней'}
        Disable-ADAccount -Server $DC $item.sAMAccountName
        $Result += New-Object PSObject -Property $detailed
    }
    $Result | Export-CSV -Path $fileLocation -NoTypeInformation -Force -Encoding "UTF8" -Delimiter ";"
}
 
#------ Send Mail ------#
 
$Subject = 'Отключение учетных записей пользователей с просроченными паролями'
    $EmailBody  = '
        <html>
        <body>
        <p class="MsoNormal">Отключение учетных записей пользователей с просроченными паролями.</i></b></p>
        <p>С уважением, Техническая поддержка.</p>
        <p>Телефон: </p>
        <p>Центр коммуникаций adminbd.ru</p>
        </html>'
             
Send-MailMessage -To 'sb.monitoring@adminbd.ru.ru' -From $Sender -SmtpServer $smtpserver -Subject $Subject -Body $EmailBody -port 587 -Attachments $fileLocation -BodyAsHtml -Encoding utf8
 
Get-ChildItem $fileDirectory -Recurse | where {$_.LastWriteTime -lt (Get-Date).AddDays(-15)} | Remove-Item -force

 

Similar Posts:

Метки:

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *