Etki Alanınızdaki Parola Süresi Dolan Kullanıcıları Erken Bilgilendirme

Tek gereksinim, AD’de depolanan bilgileri sorgulayabilmek için Active Directory Powershell modülüne ihtiyacınız olmasıdır. Ayrıca, e-posta gönder parametresini kullanmayı planlıyorsanız, kendi smtp sunucunuzdan gönderebilmek için 88-92 satırlarını değiştirmeniz gerekecektir.

Function Get-PasswordExpirationDate {
#requires -Module ActiveDirectory
<#
.EXAMPLE
    Get-PasswordExpirationDate 15
 
.EXAMPLE
    Get-PasswordExpirationDate -DaysWithinExpiration 10 -SendEmail
 
.EXAMPLE
    Get-PasswordExpirationDate -SamAccountName Username1, username2
 
#>
 
    [CmdletBinding(DefaultParameterSetName="AllAccounts")]
    param(
        [Parameter(
            Position = 0,
            Mandatory = $false,
            ParameterSetName = "AllAccounts"
        )]
        [ValidateRange(1,365)]
        [int]       $DaysWithinExpiration = 10,
 
 
        [Parameter(
            Mandatory = $false,
            ParameterSetName = "AllAccounts"
        )]
        [switch]    $SendEmail,
 
 
        [Parameter(
            Mandatory = $false,
            ParameterSetName = "SpecificAccounts",
            ValueFromPipeline=$true,
            ValueFromPipelineByPropertyName=$true
            )]
        [string[]]  $SamAccountName
    )
 
    BEGIN {}
 
    PROCESS {
        #Calculating the expired date from the domain's default password policy. -- Do Not Modify --
        $MaxPwdAge   = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
        $expiredDate = (Get-Date).addDays(-$MaxPwdAge)
 
        #Calculating the number of days until you would like to begin notifying the users. -- Do Not Modify --
        $emailDate = (Get-Date).addDays(-($MaxPwdAge - $DaysWithinExpiration))
 
        #Since specific accounts were specified we'll output their password expiration dates regardless if they are within the expiration date
        if ($PSBoundParameters.ContainsKey("SamAccountName")) {
            foreach ($User in $SamAccountName) {
                try {
                    $ADObject = Get-ADUser $User -Properties PasswordNeverExpires, PasswordLastSet, EmailAddress
                    if ($ADObject.PasswordNeverExpires -eq $true) {
                        $DaysUntilExpired = "NeverExpire"
                      } else {
                        $DaysUntilExpired = $ADObject.PasswordLastSet - $ExpiredDate | select -ExpandProperty Days
                    }
                    [PSCustomObject]@{
                        SamAccountName   = $ADObject.samaccountname.toLower()
                        PasswordLastSet  = $ADObject.PasswordLastSet
                        DaysUntilExpired = $DaysUntilExpired
                        EmailAddress     = $ADObject.EmailAddress
                    }
                } catch {
                    Write-Error $_.Exception.Message
                }
            }
        } else {
            $ExpiredAccounts = Get-ADUser -Filter {(PasswordLastSet -lt $EmailDate) -and (PasswordLastSet -gt $ExpiredDate) -and (PasswordNeverExpires -eq $false) -and (Enabled -eq $true)} -Properties PasswordNeverExpires, PasswordLastSet, EmailAddress
            foreach ($ADObject in $ExpiredAccounts) {
                try {
                    $DaysUntilExpired = $ADObject.PasswordLastSet - $ExpiredDate | select -ExpandProperty Days
                    if ($PSBoundParameters.ContainsKey("SendEmail") -and $null -ne $ADObject.EmailAddress) {
                        #Setting up email parameters to send a notification email to the user
                        $From       = "test@babur.com"
                        $Subject    = "Parola süreniz " + $DaysUntilExpired + " gün içinde dolacak."
                        $Body       = "Merhaba,`n`n Bu mail parola süreniz  " + $DaysUntilExpired + " gün içinde dolacağı için tarafınıza iletilmiştir.`n`nLütfen hizmet kesintisi yaşamamak adına parolanızı değiştiriniz..`n`nTeşekkürler,`nBilgi Teknolojileri Departmanı"
                        $smtpServer = "mail.babur.com"
                        #$CC        =  "cc1@babur.com", "cc2@babur.com"
 
                        Send-MailMessage -To $($ADObject.EmailAddress) -From $From -Subject $Subject -BodyAsHtml $Body -SmtpServer $SmtpServer #-Priority High -Cc $CC
                    }
                    [PSCustomObject]@{
                        SamAccountName   = $ADObject.samaccountname.toLower()
                        PasswordLastSet  = $ADObject.PasswordLastSet
                        DaysUntilExpired = $DaysUntilExpired
                        EmailAddress     = $ADObject.EmailAddress
                    }
                } catch {
                    Write-Error $_.Exception.Message
                }
            }
        }
    }
 
    END {}
 
}
get-PasswordExpirationDate -DaysWithinExpiration 10 -SendEmail

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir