Files
powershell/CertificateCheckUpdate/CertificateCheck.ps1
2023-03-09 09:06:25 +01:00

56 lines
1.9 KiB
PowerShell

# NSClient++ INI command:
#
#certificatecheck = cmd /c echo scripts\CertificateCheck.ps1; exit($lastexitcode) | powershell.exe -command -
[cmdletbinding()]
param(
$Warning = '90', #days
$Critical = '30' #days
)
$result = "OK"
$exitcode = 0
$certificates = Get-ChildItem 'Cert:\LocalMachine\My','Cert:\LocalMachine\TrustedPeople'
if($certificates -eq $null) {
Write-Output $result
exit $exitcode
}
$certificatesCritical = @($certificates | Where-Object { $_.NotAfter -lt (Get-Date).AddDays($Critical) }).Count
$certificatesWarning = @($certificates | Where-Object { $_.NotAfter -lt (Get-Date).AddDays($Warning) }).Count
if($certificatesWarning -gt 0) {
Write-Verbose "certificatesWarning:$certificatesWarning"
$result = "WARNING - $certificatesWarning certificate(s) expiring within $Warning days"
$exitcode = 1
if($certificatesCritical -gt 0) {
Write-Verbose "certificatesCritical:$certificatesCritical"
$result = "CRITICAL - $certificatesCritical certificate(s) expiring within $Critical days ($certificatesWarning within $Warning days)`n"
$exitcode = 2
}
$result += foreach($certificate in ($certificates | Where-Object { $_.NotAfter -lt (Get-Date).AddDays($Warning) })) {
$subject = $certificate.Subject
Write-Verbose ". subject:$subject"
Write-Verbose ($certificate | fl * | Out-String)
$date = Get-Date $certificate.NotAfter -Format 'yyyy-MM-dd HH:mm:ss'
$cnIndex = $subject.IndexOf('CN=')
if($cnIndex -ne -1) {
$commaIndex = $subject.IndexOf(',', $cnIndex)
if($commaIndex -ne -1) {
Write-Output "`n$date - $($subject.Substring($cnIndex, $commaIndex-$cnIndex))"
}
else {
Write-Output "`n$date - $($subject.Substring($cnIndex))"
}
}
else {
Write-Output "`nCN="
}
}
}
Write-Output $result
exit $exitcode