Powershell: Export in .ics Datei

jannikx21
Goto Top
Hallo zusammen,

im Internet habe ich ein Skript gefunden, welches die Ablaufdaten der Zertifikate unserer Webserver auslesen kann und in eine .csv Datei einträgt und diese dann per Mail verschickt.
Das funktioniert soweit auch super. Deutlich lieber wäre mir aber ein Export in eine .ics Datei, damit die Ablaufdaten direkt in einem Kalender eingetragen sind.

Hat irgendwer dazu eine Idee?
Macht es vielleicht mehr Sinn die .csv Datei mit einem zusätzlichen Skript zu konvertieren?
Ziel ist es, dass der Vorgang alle paar Monate über die Aufgabenplanung eines Servers gestartet wird, und dann einen aktualisierten Kalender per Mail verschickt.

Hier ist das Skript zum auslesen der Zertifikate:



#copy all the urls and servers that has certificate installed in your environment into text file rename it as urls.txt
#After you run the script, in same file, script will append data by adding date, time, url and server cert info.
param
(
[parameter(mandatory=$true)][String]$path
)
$AllProtocols = [System.Net.SecurityProtocolType]'Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
$urls = Get-Content $path
#d.ecs http gateway URL's
$date = get-date -Format G
$finaloutput = @()
$attached_file = "$psscriptroot\CertDetails.csv"

[Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
foreach ($url in $urls) {

try {

$req = [Net.HttpWebRequest]::Create($url)
$req.GetResponse() | Out-Null

$req.ServicePoint.Certificate.GetIssuerName().split(",", [System.StringSplitOptions]::RemoveEmptyEntries) | Where-Object { $_ -match "O=" } | Out-Null
if ($LASTEXITCODE) {
$certissuer = ($req.ServicePoint.Certificate.GetIssuerName().split(",", [System.StringSplitOptions]::RemoveEmptyEntries) | Where-Object { $_ -match "O=" }).trim("O =")
}
else {

$certissuer = ($req.ServicePoint.Certificate.GetIssuerName().split(",", [System.StringSplitOptions]::RemoveEmptyEntries) | Where-Object { $_ -match "CN=" } ).trim("CN =")
}
$output = [PSCustomObject]@{
URL = $url
'Startdatum' = $req.ServicePoint.Certificate.GetEffectiveDateString()
'Ablaufdatum' = $req.ServicePoint.Certificate.GetExpirationDateString()
'Zertifikatsinhaber' = $certissuer
"Datum heute" = $date

}
Write-Host Check $url -f Green
$finaloutput += $output
}
catch {
Write-Host Es ist ein Fehler aufgetreten $url`: $_ -f Red
try {
$formatteddata = [PSCustomObject]@{
URL = "Fehler bei $url"
'Startdatum' = $req.ServicePoint.Certificate.GetEffectiveDateString()
'Ablaufdatum' = $req.ServicePoint.Certificate.GetExpirationDateString()
'Zertifikatsinhaber' = $certissuer
"Datum heute" = $date
}
}
catch {
$formatteddata = [PSCustomObject]@{
URL = "Timeout bei $url"
'Startdatum' = $date
'Ablaufdatum' = $date
'Zertifikatsinhaber' = "Unbekannt - konnte nicht ermittelt werden"
"Datum heute" = $date
}
}
$finaloutput += $formatteddata

}


}

Remove-item $psscriptroot\CertDetails.csv
$finaloutput | export-csv -Path $psscriptroot\CertDetails.csv -Append -NoTypeInformation –Delimiter ";"

$message= "Das Ablaufdatum der Zertifikate entnehmen Sie bitte dem Anhang."
$messagetitle= "Ablauf der d.3 Zertifikate"
Send-MailMessage -From Zertifikate@mail.mail -To " ;mail@mail.mail" -Subject $messagetitle -body $message -Attachments $attached_file -SmtpServer exchange.mail.intern -Encoding UTF8




Danke für eure Hilfe!
Gruß Jannik

Content-Key: 1375926722

Url: https://administrator.de/contentid/1375926722

Ausgedruckt am: 19.08.2022 um 18:08 Uhr

Mitglied: 149569
149569 11.10.2021 aktualisiert um 10:28:37 Uhr
Goto Top
Das iCalendar Format ist Standardisiert, du brauchst also nur die RFC durchlesen und kannst danach ICS Dateien mit deinen Daten erstellen
https://datatracker.ietf.org/doc/html/rfc5545

Wobei ich das ja persönlich wenn bspw. ein Exchange zum Einsatz kommen würde, direkt in eine Mailbox via EWS schreiben würde statt erst eine ICS Datei zu erstellen die man dann noch importieren muss.

Aber selbst das wäre überflüssig wenn man die Zertifikatserneuerung automatisiert, in den meisten Fällen ja schon durch Lets Encrypt vorgegeben, weil die alle 3 Monate ablaufen. Ich benachrichtige eigentlich nur wenn bei dem Erneuerungs-Prozess was schief läuft bzw. wenn es nur noch 10 Tage bis zum Ablauf eines Certs sind und man manuell eingreifen muss, ansonsten geht das hier silent von statten.
Mitglied: NordicMike
NordicMike 11.10.2021 um 10:45:31 Uhr
Goto Top
Habt Ihr kein Hardware Monitoring im Netzwerk? Das macht z.B. Zabbix nebenbei mit.