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