Public/Invoke-ADUserLockoutStatusReport.ps1
Function Invoke-ADUserLockoutStatusReport { # .ExternalHelp .\Invoke-ADUserLockoutStatusReport-help.xml [cmdletbinding(SupportsShouldProcess=$true)] param( [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [String]$UserName, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [String]$ReferenceComputer, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [DateTime]$LockOutTime, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [String]$DC, [parameter(ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [string]$DisplayName, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [string]$LockoutDuration, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [String]$SMTPServer, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [String]$from, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$False)] [String]$AdminEmail, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$False)] [String]$CompanyName ) BEGIN{ Import-module ActiveDirectory }#BEGIN PROCESS{ try{ Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ] Getting User $($UserName) DisplayName" $UserDetails = Get-ADUser -Identity $($UserName) -Properties Name, EmailAddress -ErrorAction Stop Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ] Genarating report output for $($UserDetails.Name)" $Report = [pscustomobject][ordered]@{ "DisplayName" = $UserDetails.Name "UserName" =$UserName "UserEmail" = $UserDetails.EmailAddress "ReferenceComputer" = $ReferenceComputer "LockoutTime" =$LockOutTime "DC" = $DC } $Report if($PSCmdlet.ShouldProcess($UserDetails.EmailAddress)){ $Report | Send-AccountLockoutNotificationEmail -SMTPServer $SMTPServer -LockoutDuration $LockoutDuration -from $from -AdminEmail $AdminEmail -CompanyName $CompanyName }#IF }#TRY Catch{ $ErrorMessage = $_.Exception.Message $ErrorMessage }#CATCH }#PROCESS END{ }#END }#Function Invoke-ADUserLockoutStatusReport Function Send-AccountLockoutNotificationEmail { [cmdletbinding()] Param ( [parameter(ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [string]$DisplayName, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [string]$UserName, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [string]$ReferenceComputer, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [string]$LockOutTime, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [string]$LockoutDuration, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [String]$SMTPServer, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [String]$from, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$False)] [String[]]$UserEmail, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$False)] [String[]]$AdminEmail, [parameter(ValueFromPipeline=$False,ValueFromPipelineByPropertyName=$true,Mandatory=$False)] [String]$CompanyName ) Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ] Setting up HTML Information for email" $Subject = "Windows User Accout was locked out for $($DisplayName)" $AdminSubject = "User $($DisplayName) was locked out at $($LockOutTime)" $Body = "Dear <b>$($DisplayName)</b></font>," $Body += "<p><br><font color=red>Your account $($UserName) was locked out on $($LockOutTime)</font></b></p>" $Body += "<p>You will need to contact the IT Helpdesk to unlock your account or wait for $($LockoutDuration) mins until the system automatically unlocks your account.</p>" $Body += "<p>UserName: $($UserName)</p>" $AdminBody = "<p>UserName: $($UserName)</p>" $Body += "<p>Time Locked Out: $($LockOutTime)</p>" $AdminBody += "<p>Time Locked Out: $($LockOutTime)</p>" $Body += "<p>Reference Computer: $($ReferenceComputer)</p>" $AdminBody += "<p>Reference Computer: $($ReferenceComputer)</p>" $Body += "<P>Thank you</p>" $Body += "<p>$($CompanyName) IT Support</P>" if ($UserEmail -ne $null) { Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ] User email address detected" Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ] Sending User EMail to $($UserEmail)" Send-MailMessage -SmtpServer $SMTPServer -To $UserEmail -From $from -Subject $Subject -Body $Body -BodyAsHtml -Priority high Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ] Sending Admin EMail to $($AdminEmail)" Send-MailMessage -SmtpServer $SMTPServer -To $AdminEmail -From $from -Subject $AdminSubject -Body $AdminBody -BodyAsHtml -Priority high }#IF else{ Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ] Sending Mail to $($AdminEmail)" Send-MailMessage -SmtpServer $SMTPServer -To $AdminEmail -From $from -Subject $AdminSubject -Body $AdminBody -BodyAsHtml -Credential $Cred -Priority high }#ELSE }# Function Send-AccountLockoutNotificationEmail # SIG # Begin signature block # MIIIWAYJKoZIhvcNAQcCoIIISTCCCEUCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU6Iom+Aee4sdvPmLyP34GfAmM # 6t6gggXTMIIFzzCCBLegAwIBAgIKI+alEgAAAAAMTzANBgkqhkiG9w0BAQUFADBA # MRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFjAUBgoJkiaJk/IsZAEZFgZwZXRlcnMx # DzANBgNVBAMTBlJvb3RDQTAeFw0xNjA1MjUyMjQ5MjVaFw0yMTA1MjQyMjQ5MjVa # MIGIMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFjAUBgoJkiaJk/IsZAEZFgZwZXRl # cnMxFzAVBgNVBAsTDlBldGVycyBPYmplY3RzMQ4wDAYDVQQLEwVVc2VyczEUMBIG # A1UECxMLQ29udHJhY3RvcnMxGDAWBgNVBAMTD1NoaWhhbiBQaWV0ZXJzejCCASIw # DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALqjlVFhz2Jmijj+v6bTi4EiAOJA # Dx9InjUSh3aN06eELeKMRjqc0B33dk04kkq6Rs0dy8vvvrmQlE/Etoqx+GRJiy6K # JC34FLQI85YxHrGNhLM54EZwRHX+iDsXsmZvEQqDaUHRC9QzT77fYVQOe8AxojLh # zilyIHIU2Ec+N0chNX77I5e76K6L6fZa92R7lWz+fbeJm6IJIXSpukGTSFPMvLcg # LnflfnnDBDCsfHecY9ZFPEH8LLs+LzV5ta5w8fVFt1IzqAHmiXWEx70t2n1jqvpx # zx4ykBjKORHaVV8IzfiCrICbGl1/082lcdlO/1GbJaJlicTRzFPtoW47/AECAwEA # AaOCAoAwggJ8MDwGCSsGAQQBgjcVBwQvMC0GJSsGAQQBgjcVCIH7wgPJxmWHoZ0j # hYmgYYPNihR3gqzMRYXVsj8CAWQCAQIwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYD # VR0PAQH/BAQDAgeAMBsGCSsGAQQBgjcVCgQOMAwwCgYIKwYBBQUHAwMwHQYDVR0O # BBYEFGyYZLBdWxaiOaYrLW+7v7Vzvy1XMB8GA1UdIwQYMBaAFKJt615sTsvKB+Vm # TET+s9YiUd9lMIHKBgNVHR8EgcIwgb8wgbyggbmggbaGgbNsZGFwOi8vL0NOPVJv # b3RDQSxDTj1QRVRNVUxTRVIwMTYsQ049Q0RQLENOPVB1YmxpYyUyMEtleSUyMFNl # cnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9cGV0ZXJzLERD # PWxvY2FsP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFz # cz1jUkxEaXN0cmlidXRpb25Qb2ludDCBuQYIKwYBBQUHAQEEgawwgakwgaYGCCsG # AQUFBzAChoGZbGRhcDovLy9DTj1Sb290Q0EsQ049QUlBLENOPVB1YmxpYyUyMEtl # eSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9cGV0 # ZXJzLERDPWxvY2FsP2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1jZXJ0 # aWZpY2F0aW9uQXV0aG9yaXR5MDEGA1UdEQQqMCigJgYKKwYBBAGCNxQCA6AYDBZ2 # LXNwaWV0ZXJAcGV0ZXJzLmxvY2FsMA0GCSqGSIb3DQEBBQUAA4IBAQAYLtV27syc # YJgAMf07HQJSZ39O5AZL7NrxBifKpXGryK5imi1zKOaJCYVY1KDrfu+gCLW2IYuB # TeSjqg2HHgM1p3dgS+uufcPasgBJsYnsFSqlTOnezu2IH87d73YuhlpRfR2r649A # 0QXvwYe4aLgENyy6k9N0bkqMWEFxlShIOVY/adlU+qKOP2sPBUC5p9STJ909IYtQ # mN+3iybKr0HMiECBPBH/HxlVqjtIu7PtqYwEBr3socadSmhHp+HwhB74xJ3coegU # CBeRHMpQNlBuu41fmAGExDunJsaCg87n6Kyx9qMguICj7sjU1IAHuouFuRx6UKac # lRhThY4m3CDxMYIB7zCCAesCAQEwTjBAMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwx # FjAUBgoJkiaJk/IsZAEZFgZwZXRlcnMxDzANBgNVBAMTBlJvb3RDQQIKI+alEgAA # AAAMTzAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkq # hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGC # NwIBFTAjBgkqhkiG9w0BCQQxFgQUjh8C+vBYRvoYhppGIPpA77bxzRIwDQYJKoZI # hvcNAQEBBQAEggEATQbGxNde8S77NdFHx4PSJNrDogakz2yl5qZhXNZ/PpnY7XKz # z5L3rWWUKM1fHrjc9yE79F1jk2aYPfE3mrXJobPcU4VVyT5NNMOjGWi4wL++JpHX # KgZho+C6tHXZN8dxJ9ydEMPBcuxyBDYnMdD5SOTP2mHyzd1Q869ugn4illy19Lqs # 4NPmcdPXoN1/ggGHhRrB/JQ2yg8EdcKLdSN2/kkZFqaiRYdOAtIKY/05zX1/GfHM # JJdMu8rhZeqfVuacJcgJ/+qYpgsWG0s51TpWauiXRv6LnW7fR6M7dSwwpFpN+JKP # chm5PC6SqHvoSbbnqMaH4wVKw+udlwBRmtyC1g== # SIG # End signature block |