56 lines
1.9 KiB
PowerShell
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 |