Hi guys,
I am running the below powershell script to pull the number of days before our CA certs expire.
$threshold = 9999 #Number of days to look for expiring certificates
$deadline = (Get-Date).AddDays($threshold) #Set deadline date
[string]$ServerName = "test-server" #Leave this blank when utilizing this in PRTG
Invoke-Command -ComputerName $ServerName { Dir Cert:\LocalMachine\My } | foreach {
If ($_.NotAfter -le $deadline) { $_ | Format-List Issuer, @{Label="Expires In (Days)";Expression={($_.NotAfter - (Get-Date)).Days}} ;}
elseif ($_.NotAfter -ge $deadline) {Write-host $deadline ":All Certificates are NOT expiring within $threshold days."}
}
The Expected output looks like this:
Issuer : CN=test-serverCACERT
Expires In (Days) : 43
Issuer : CN=test.serverCACERT
Expires In (Days) : 43
Currently, PRTG is only executing the script and not displaying any of the outputs. Am I able to format the output so that PRTG will create channels based on the issuer, and a value based on the Expires In (Days)?
Article Comments
Currently we are now getting "unauthorized access." Any thoughts?
I am able to run the script manually with the desired credentials on the Probe, and it runs flawlessly.
Aug, 2016 - Permalink
This is the script in a more refined form.
Param(
[string]$Servername
)
$threshold = 30 #Number of days to look for expiring certificates
$deadline = (Get-Date).AddDays($threshold) #Set deadline date
Invoke-Command -ComputerName $ServerName { Dir Cert:\LocalMachine\My } | foreach {
If ($_.NotAfter -le $deadline)
{
$Days= $_.NotAfter - (Get-Date)
}
$Day= ($_.NotAfter - (Get-Date)).Days
}
If ($Day -le $threshold)
{
$Resultvalue= "1"
$sensormessage= "The CA Certificates are about to expire in $Day days!"
}
else
{
$Resultvalue= "0"
$sensormessage= "All certificates are valid beyond $threshold days!"
}
write-host $resultvalue":"$sensormessage
Aug, 2016 - Permalink
Dear TSchroeder
By default, the script is started by the Probe service which in turn runs with the local system account. Since the Probe is a 32-bit service, it also starts the 32-bit Powershell.
Please check the security context setting of the Exe/Script sensor and make sure it is set to use the Windows credentials of the parent device. Please also check those device credentials.
Aug, 2016 - Permalink
Dear TSchroeder
To output just one channel, you can use the Custom Exe/Script standard sensor and use the output format
value:message
like
(Of course, this implies having those variables with the according content.)
To return multiple channels, the Exe/Script Advanced sensor is requried. That sensor expect an XML conforming to the Custom Script Advanced API. The API documentation is integrated in the PRTG webinterface, menu Setup | PRTG API, tab "Custom Sensors".
Aug, 2016 - Permalink