# =================== # Global Variables # =================== # For Testing Purpose # New-TimeSpan -Start (get-date) -End 21-06-2019 $Days = "75" # ATTENTION a variable does not funktion at AddDays with Powershell Version 3 in combination with Invoke. Version5 and up Works $OutFile = "C:\Temp\Certlist.txt" # ============================ # Create Array # ============================ $Serverliste = @( "Server01.domain.local" "Server02.domain.local" "Server03.domain.local" "Server04.domain.local" ) "Serverliste `r`n===========" | Out-File $OutFile # ============================ # Reading out Certificates # ============================ $Zertliste = ( Invoke-Command -ComputerName $Serverliste -ScriptBlock {Get-ChildItem Cert:\LocalMachine\My | Where {$_.NotAfter -lt (Get-Date).AddDays(75)}} | Select-Object Issuer, NotAfter, SerialNumber, Subject, Use, DnsNameList | ForEach { #Added Days manuall because of Powershel Version 3 [pscustomobject]@{ ".===========" = "=======================================" FQDN = $_.Subject Issuer = $_.Issuer Use = $_.Use #Computername = $_.PSComputername ExpiresOn = $_.NotAfter DNSListNames = $_.DnsNameList "============" = "=======================================" } } |Sort-Object -Descending ) |Out-File $OutFile -Append "Get-CScertificate`r`n=================" | Out-File $OutFile -Append Get-CsCertificate | Select-Object Issuer, NotAfter, SerialNumber, Subject, Use, AlternativeNames | Where {$_.NotAfter -lt (Get-Date).AddDays($Days)}| ForEach { [pscustomobject]@{ ".===========" = "=======================================" FQDN = $_.Subject Issuer = $_.Issuer Use = $_.Use Computername = $_.PSComputername ExpiresOn = $_.NotAfter AlternativeNames = $_.AlternativeNames "============" = "=======================================" } } |Sort-Object -Descending | Out-File $OutFile -Append "List of Dns Names expiring in Lync Or Skype`r`n===================================================" | Out-File $OutFile -Append Get-CsCertificate | Where {$_.NotAfter -lt (Get-Date).AddDays($Days)} | Select-Object -ExpandProperty AlternativeNames -Unique| Sort-Object -Descending | Out-File $OutFile -Append "===================================================" | Out-File $OutFile -Append # =================================================================== # Sending Mail if file is bigger then Empty kb. # =================================================================== $ToAddress = "admin@domain.local" $FromAddres = "$env:computername.$env:userdnsdomain <$ToAddress>" #$SmtpServer = "smtp.office365.com" $SmtpServer = "mrelay.domain.local" # INFO: server that runs script must be allowed in FW, on mailrelay and in Virus Console outgoing connection to port 25 must be allowed! #$SmtpPort = "587" $Attachment = "$OutFile" $Subject = "Certliste with Certificates that will Expire in $days from the Skype Environment" #Body as HTML $BodyHead = "This mail has been automaticly generated by the GetCSertificate script. <br> This Task runs following script C:\Temp\GetCSCertifikate.ps1. <br><br>See Attachment for expiring Certificates.<br>Please do not reply<br><br><br>" $Body = "$BodyHead" + "$Zertliste" #Body as Text #$Body = "This is an automated mail used by a script. `r`n Please do not reply. `r`n `r See Attachment with log" $mailparam = @{ To = $ToAddress From = $FromAddres Subject = $Subject Body = $Body Smtpserver = $SmtpServer #Port = $SmtpPort #Credential = $SmtpCred Attachment = $Attachment } # ========================= # Check File for testing # ========================= # Get-ChildItem -File $OutFile | select length if( (get-item $OutFile).length -eq 434) {"File is blank"} #If ((Get-Content $Attachment) -eq 1kb) {"File is blank"} Elseif ((Get-Content $Attachment) -gt 434) {Send-MailMessage @mailparam -UseSsl -BodyAsHtml}