Cras libellum expirata in Fenestra in NetXMS

Nuper ante faciem sumus cum munere vigilantiae validitatis tempus libellorum in Fenestra servientibus. Bene, quomodo surrexi post libellos aliquotiens in cucurbitam conversus, eo ipso tempore quo collega barbatus auctor suae renovationis ferias agit. deinde ipse et suspicatus sum aliquid et de eo cogitandum decrevi. Cum tardius exsequentes systema vigilantia NetXMS sumus, principalis facta est et, in principio, unico ad hoc negotium candidatus.

Quo factum est, ut in hac forma tandem impetraretur;

Cras libellum expirata in Fenestra in NetXMS

Et ipse processus prosequitur.

Vade. Nulla in re-constructa ad exspirandas libellos in NetXMS, ideo opus est tua creare et scripta utere ut ea cum notitia praebeas. Nempe in Powershell, hoc est Fenestra. Scriptum omnes libellos in systemate operante legere debet, in diebus inde expletis diem suum capiat et hunc numerum ad NetXMS transeat. Per procuratorem suum. Hic incipiemus.

optio unussimplicissimus. Simpliciter habe numerum dierum usque ad expletum diem certificamenti cum proximis date.

Pro servo NetXMS cognoscere consuetudinem consuetudinis nostrae parametri esse, eam ab agente accipere debet. Alioquin modulus iste ob absentiam suam addi non potest. Ergo in configuration file agente nxagentd.conf addimus externum parametri linea dicta HTTPS.CertificateExpireDateSimple, in quo scriptionis enucleandae subcriptio:

ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "servershareNetXMS_CertExpireDateSimple.ps1"

Cum scriptum sit per retiaculum induci, debes meminisse de eo Executio Policyet praeterea alterum "-NoLogo -NoProfile -NonInteractive", quod omisi in meliori codice readability omisi.

Quam ob rem agens config aliquid simile hoc spectat;

#
# NetXMS agent configuration file
# Created by agent installer at Thu Jun 13 11:24:43 2019
#
 
MasterServers = netxms.corp.testcompany.ru
ConfigIncludeDir = C:NetXMSetcnxagentd.conf.d
LogFile = {syslog}
FileStore = C:NetXMSvar
SubAgent = ecs.nsm
SubAgent = filemgr.nsm
SubAgent = ping.nsm
SubAgent = logwatch.nsm
SubAgent = portcheck.nsm
SubAgent = winperf.nsm
SubAgent = wmi.nsm
 
ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "servershareNetXMS_CertExpireDateSimple.ps1"

Postea debes config salvare ac sileo procuratorem. Hoc facere potes e console NetXMS: config aperi (informatio lima agentis Edit), eam edit, fac Serva & Applica, ex quo re vera idem fiet. Deinde re-legere configurationem (Poll > configurationis), si vis omnino exspectare non habes. Post hos gradus consuetudini nostrae modulum addere possis.

In NetXMS console ire ad Data Collectio configurationis experimentalis ministrator in quo sumus monitores libellos adeundos atque novum ibi parametrum (in futuro, post configurationem, sensum ad exempla transferre facit). HTTPS. CertificateExpireDateSimple e indice, Descriptionem clari nominis inire, typum ad Integer pone et spatium suffragium configurare. Ad proposita debugging, sensum breviorem facit, ut 30 secundis. Omnia parata sunt, iam satis est.

Inhibere potes... Immo immaturum est. Nunc certe nihil obtinemus. Simpliciter quia scriptura nondum scripta est. Corripiamus hanc omissionem. Scriptum simpliciter numerum ostendet, numerum dierum remanentium usque ad libellum exspirat. Minima maxime omnis consectetur. Exemplum script:

try {
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС сСртификаты ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° сСртификатов
    $lmCertificates = @( Get-ChildItem -Recurse -path 'Cert:LocalMachineMy' -ErrorAction Stop )
     
    # Если сСртификатов Π½Π΅Ρ‚, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "10 Π»Π΅Ρ‚"
    if ($lmCertificates.Count -eq 0) { return 3650 }
 
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Expiration Date всСх сСртификатов
    $expirationDates = @( $lmCertificates | ForEach-Object { return $_.NotAfter } )
 
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΈΠΉ Expiration Date ΠΈΠ· всСх
    $minExpirationDate = ($expirationDates | Measure-Object -Minimum -ErrorAction Stop ).Minimum
 
    # ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΈΠΉ Expiration Date Π² количСство ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π΄Π½Π΅ΠΉ с ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ сторону
    $daysLeft = [Math]::Floor( ($minExpirationDate - [DateTime]::Now).TotalDays )
 
    # Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    return $daysLeft
}
catch {
    return -1
}

Sic evenit;

Cras libellum expirata in Fenestra in NetXMS

723 dies, duo fere anni supersunt usque ad libellum exspirat. Consentaneum est, quod libellos de Exchange test scamnum satis recens re-edisti.

Facilis optio erat. Probabiliter aliquis contentus erit hoc, sed voluimus plura. Negotium nobis constituimus obtinendi indicem omnium libellorum in calculonis servi nominatim et pro singulis ad numerum dierum usquedum certificatorium exspirat.

Secundum optionemaliquanto crassius.

Iterum recensimus config agentem, et ibi pro linea cum Externo parametro scribimus duos alios;

ExternalList = HTTPS.CertificateNames: powershell.exe -File "serversharenetxms_CertExternalNames.ps1"
ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -File "serversharenetxms_CertExternalParameter.ps1" -CertificateId "$1"

Π’ ExternalList nos iustus a album chordarum. In nobis, index chordarum cum nominibus certificatorium. Indicem harum linearum scripturi accipiemus. Nomen album - HTTPS.CertificateNames.

Script NetXMS_CertNames.ps1:

#Бписок Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ сСртификатов
$nameTypeList = @(
        [System.Security.Cryptography.X509Certificates.X509NameType]::SimpleName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::DnsName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::DnsFromAlternativeName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::UrlName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::EmailName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::UpnName
)
 
#Π˜Ρ‰Π΅ΠΌ всС сСртификаты, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
$certList = @( Get-ChildItem -Path 'Cert:LocalMachineMy' | Where-Object { $_.HasPrivateKey -eq $true } )
 
#ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ списку сСртификатов, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ строку "Имя сСртификата - Π”Π°Ρ‚Π° - Thumbprint" ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π΅Ρ‘
foreach ($cert in $certList) {
    $name = '(unknown name)'
    try {
        $thumbprint = $cert.Thumbprint
        $dateExpire = $cert.NotAfter
        foreach ($nameType in $nameTypeList) {
            $name_temp = $cert.GetNameInfo( $nameType, $false)
            if ($name_temp -ne $null -and $name_temp -ne '') {
                $name = $name_temp;
                break;
            }
        }
        Write-Output "$($name) - $($dateExpire.ToString('dd.MM.yyyy')) - [T:$($thumbprint)]"
    }
    catch {
        Write-Error -Message "Error processing certificate list: $($_.Exception.Message)"
    }
}

Et iam in ExternalParameter Ordines inputamus ab externo indicem, et in output totidem dies pro singulis accipimus. Identifier est Thumbprint certificatorium. Nota quod HTTPS.CertificateExpireDate asteriscum continet (*) in hoc variante. Hoc necessarium est ut variabiles externas accipiat, sicut nostri CertificateId.

Script NetXMS_CertExpireDate.ps1:

#ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ входящий ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ $CertificateId
param (
    [Parameter(Mandatory=$false)]
    [String]$CertificateId
)
 
#ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сущСствованиС
if ($CertificateId -eq $null) {
    Write-Error -Message "CertificateID parameter is required!"
    return
}
 
#По Thumbprint ΠΈΠ· строки Π² $CertificateId ΠΈΡ‰Π΅ΠΌ сСртификат ΠΈ опрСдСляСм Π΅Π³ΠΎ Expiration Date 
$certId = $CertificateId;
try {
    if ($certId -match '^.*[T:(?<Thumbprint>[A-Z0-9]+)]$') {
        $thumbprint = $Matches['Thumbprint']
        $certificatePath = "Cert:LocalMachineMy$($thumbprint)"
         
        if (Test-Path -PathType Leaf -Path $certificatePath ) {
            $certificate = Get-Item -Path $certificatePath;
            $certificateExpirationDate = $certificate.NotAfter
            $certificateDayToLive = [Math]::Floor( ($certificateExpirationDate - [DateTime]::Now).TotalDays )
            Write-Output "$($certificateDayToLive)";
        }
        else {
            Write-Error -Message "No certificate matching this thumbprint found on this server $($certId)"
        }
    }
    else {
        Write-Error -Message "CertificateID provided in wrong format. Must be FriendlyName [T:<thumbprint>]"
    }
}
catch {
    Write-Error -Message "Error while executing script: $($_.Exception.Message)"
}

In Data Collectione configurationis servientis novum parametrum creamus. In Parametro eligamus nostrum HTTPS.CertificateExpireDate (*) e indice, et (attentio!) asterisco mutatur in {exempli gratia}. Hoc magni momenti punctum sineret te singularem calculi rationem creare pro singulis instantia (testimonium). Reliqua ut in priori versione referta sunt;

Cras libellum expirata in Fenestra in NetXMS

Ut aliquid ex calculis creare possit, in Instantia Inventionis tab, debes eligere Agentem Indicem e indice et in nomine Agri Nomen intrant nomen nostri ExternalList ex scripto - HTTPS.CertificateNames.

Paene paratus, paululum vel vim Poll > Configurationis et Poll > Instantia Inventionis si expectare omnino impossibile est. Quam ob rem omnes nostras testimoniales cum validitate periodos colligimus;

Cras libellum expirata in Fenestra in NetXMS

Quod requires? Bene, ita, solus vermis perfectionismi hunc superfluum Thumbprint aspicit in nomine calculi tristibus oculis et articulum non permitto. Ad eam nutriendam, proprietates contrahendas iterum aperite et in Instantia Inventionis tab, in "Instantia inveniendae scripturae filtri" campi, adde unum scriptum in NXSL (NetXMS lingua interna) script;

instance = $1;
 if (instance ~= "^(.*)s-s[T:[a-zA-Z0-9]+]$")
 {
 return %(true, instance, $1);
 }
 return true;

quae Colum Thumbprint:

Cras libellum expirata in Fenestra in NetXMS

Et ut eam eliquatam exhibeas, tab in agro Generali in Descriptione, muta CertificateExpireDate: {instantia} ad CertificateExpireDate: {exempli nomine}:

Cras libellum expirata in Fenestra in NetXMS

Id denique metam ex KDPV;

Cras libellum expirata in Fenestra in NetXMS

Nonne pulchritudo?

Reliquum est ut in summis montibus erigantur ut per electronicam perveniant cum libellum exspirat.

1. Primum opus est ut eventus Formulae ad excitandum illud efficiendum, cum valor contrarius decrescit ad aliquod limen quod constituimus. IN' Event configurationis Duo nova exempla in nominibus ut faciamus creare CertificateExpireDate_Threshold_Activate Admonitio ad statum:

Cras libellum expirata in Fenestra in NetXMS

et similia CertificateExpireDate_Threshold_Deactivate per normalem statum.

2. Deinde in abacum proprietates adi et pone limen in Tresholdis tab;

Cras libellum expirata in Fenestra in NetXMS

ubi eligimus res nostras creatas CertificateExpireDate_Threshold_Activate et CertificateExpireDate_Threshold_Deactivate, pone numerum exemplorum (Samples) ad 1 (specialiter huic calculo nullum punctum est in occasu plus), valor est 30 (dies), exempli gratia, ac potius pone. eventus, repetitio temporis. Pro libellorum in productione semel in die (86400 secundo) constitui, aliter in notificationibus mergere potes (quod obiter semel factum est, adeo ut mailbox super volutpat vestibulum plena esset). Pro tempore debugging, sensum facit ad inferiorem, LX secundis, pro exemplo.

3. Quod Actio configurationis template notificationem creare litterae, sic:

Cras libellum expirata in Fenestra in NetXMS

Omnes hi %m, %S, etc. β€” macros in quos valores ex parametro nostro substituentur. Describuntur planius in manual NetXMS.

4. Ac tandem, puncta coniungens in praecedentibus Res Processing Policy regulam crea secundum quam Terror creabitur et litterae mittentur;

Cras libellum expirata in Fenestra in NetXMS

Servamus consilium, omnia probentur. Limen altiore statuamus sisto. Proximum testimonium meum in 723 diebus exspirat, 724 ad reprimendum constituo. Quo fit, ut terrorem insequentes obtineamus:

Cras libellum expirata in Fenestra in NetXMS

et haec inscriptio notificatio:

Cras libellum expirata in Fenestra in NetXMS

Id nunc certe omnia. Fieri quidem posset, ut ashboardday et graphes construeret, sed testimonia haec aliquantum inane essent lineas rectas et taediosam, dissimiles graphes processus vel oneris memoriae, exempli gratia. Sed auctor tempus aliquam.

Source: www.habr.com