ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ืœืื—ืจื•ื ื” ืขืžื“ื ื• ื‘ืคื ื™ื ื• ื”ืžืฉื™ืžื” ืœื ื˜ืจ ืืช ืชืงื•ืคืช ื”ืชื•ืงืฃ ืฉืœ ืื™ืฉื•ืจื™ื ื‘ืฉืจืชื™ Windows. ื•ื‘ื›ืŸ, ืื™ืš ืงืžืชื™ ืื—ืจื™ ืฉื”ืชืขื•ื“ื•ืช ื”ืคื›ื• ืœื“ืœืขืช ื›ืžื” ืคืขืžื™ื, ื‘ื“ื™ื•ืง ื‘ื–ืžืŸ ืฉื”ืงื•ืœื’ื” ื”ืžื–ื•ืงืŸ ื”ืื—ืจืื™ ืœื—ื™ื“ื•ืฉืŸ ื”ื™ื” ื‘ื—ื•ืคืฉื”. ืื—ืจื™ ื–ื”, ื”ื•ื ื•ืื ื™ ื—ืฉื“ื ื• ื‘ืžืฉื”ื• ื•ื”ื—ืœื˜ื ื• ืœื—ืฉื•ื‘ ืขืœ ื–ื”. ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืžื™ื™ืฉืžื™ื ืœืื˜ ืœืื˜ ืืช ืžืขืจื›ืช ื”ื ื™ื˜ื•ืจ NetXMS, ื”ื™ื ื”ืคื›ื” ืœื”ื™ื•ืช ื”ืžื•ืขืžื“ืช ื”ืขื™ืงืจื™ืช ื•ื‘ืขื™ืงืจื•ืŸ ื”ื™ื—ื™ื“ื” ืœืžืฉื™ืžื” ื–ื•.

ื”ืชื•ืฆืื” ื”ืชืงื‘ืœื” ืœื‘ืกื•ืฃ ื‘ืฆื•ืจื” ื”ื‘ืื”:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื•ื”ืชื”ืœื™ืš ืขืฆืžื• ืžืžืฉื™ืš.

ืœืœื›ืช. ืื™ืŸ ืžื•ื ื” ืžื•ื‘ื ื” ืœืื™ืฉื•ืจื™ื ืฉืคื’ ืชื•ืงืคื ื‘-NetXMS, ืœื›ืŸ ืขืœื™ืš ืœื™ืฆื•ืจ ืžืฉืœืš ื•ืœื”ืฉืชืžืฉ ื‘ืกืงืจื™ืคื˜ื™ื ื›ื“ื™ ืœืกืคืง ืœื• ื ืชื•ื ื™ื. ื›ืžื•ื‘ืŸ, ื‘-Powershell, ื–ื” Windows. ื”ืกืงืจื™ืคื˜ ืฆืจื™ืš ืœืงืจื•ื ืืช ื›ืœ ื”ืื™ืฉื•ืจื™ื ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื”, ืœืงื—ืช ืืช ืชืืจื™ืš ื”ืชืคื•ื’ื” ืฉืœื”ื ื‘ืขื•ื“ ื™ืžื™ื ืžืฉื ื•ืœื”ืขื‘ื™ืจ ืืช ื”ืžืกืคืจ ื”ื–ื” ืœ-NetXMS. ื“ืจืš ื”ืกื•ื›ืŸ ืฉืœื•. ืฉื ื ืชื—ื™ืœ.

ืืคืฉืจื•ืช ืื—ืช, ื”ื›ื™ ืคืฉื•ื˜. ื›ืœ ืฉืขืœื™ืš ืœืขืฉื•ืช ื”ื•ื ืœืงื‘ืœ ืืช ืžืกืคืจ ื”ื™ืžื™ื ืขื“ ืœืชืืจื™ืš ื”ืชืคื•ื’ื” ืฉืœ ื”ืชืขื•ื“ื” ืขื ื”ืชืืจื™ืš ื”ืงืจื•ื‘ ื‘ื™ื•ืชืจ.

ื›ื“ื™ ืฉืฉืจืช NetXMS ื™ื“ืข ืขืœ ืงื™ื•ืžื• ืฉืœ ื”ืคืจืžื˜ืจ ื”ืžื•ืชืื ืื™ืฉื™ืช ืฉืœื ื•, ืขืœื™ื• ืœืงื‘ืœ ืื•ืชื• ืžื”ืกื•ื›ืŸ. ืื—ืจืช, ืœื ื ื™ืชืŸ ืœื”ื•ืกื™ืฃ ืคืจืžื˜ืจ ื–ื” ื‘ื’ืœืœ ื”ื™ืขื“ืจื•. ืœื›ืŸ, ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ ื”ืกื•ื›ืŸ nxagentd.conf ืื ื• ืžื•ืกื™ืคื™ื ืžื—ืจื•ื–ืช ืคืจืžื˜ืจ ื—ื™ืฆื•ื ื™ ื‘ืฉื HTTPS.CertificateExpireDateSimple, ืฉื‘ื• ืื ื• ืจื•ืฉืžื™ื ืืช ื”ืฉืงืช ื”ืชืกืจื™ื˜:

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

ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉื”ืชืกืจื™ื˜ ืžื•ืคืขืœ ื‘ืจืฉืช, ืืชื” ืฆืจื™ืš ืœื–ื›ื•ืจ ื‘ืขืจืš ืžื“ื™ื ื™ื•ืช ื”ื•ืฆืื” ืœืคื•ืขืœ, ื•ืืœ ืชืฉื›ื— ื’ื ืืช ื”-"-NoLogo -NoProfile -NonInteractive" ื”ืื—ืจ, ืื•ืชื• ื”ืฉืžื˜ืชื™ ืœืžืขืŸ ืงืจื™ืื•ืช ืงื•ื“ ื˜ื•ื‘ื” ื™ื•ืชืจ.

ื›ืชื•ืฆืื” ืžื›ืš, ืชืฆื•ืจืช ื”ืกื•ื›ืŸ ื ืจืื™ืช ื‘ืขืจืš ื›ืš:

#
# 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"

ืœืื—ืจ ืžื›ืŸ, ืขืœื™ืš ืœืฉืžื•ืจ ืืช ื”ืชืฆื•ืจื” ื•ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืกื•ื›ืŸ. ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื–ืืช ืžืžืกื•ืฃ NetXMS: ืคืชื— ืืช ื”ืชืฆื•ืจื” (ืขืจื™ื›ืช ืงื•ื‘ืฅ ื”ื”ื’ื“ืจื•ืช ืฉืœ ื”ืกื•ื›ืŸ), ืขืจื•ืš ืื•ืชื•, ื”ืคืขืœ ืืช Save&Apply, ื•ื›ืชื•ืฆืื” ืžื›ืš, ืœืžืขืฉื”, ืื•ืชื• ื“ื‘ืจ ื™ืงืจื”. ืœืื—ืจ ืžื›ืŸ ืงืจื ืฉื•ื‘ ืืช ื”ืชืฆื•ืจื” (ืกืงืจ > ืชืฆื•ืจื”), ืื ืื™ืŸ ืœืš ื›ื•ื— ืœื—ื›ื•ืช ื‘ื›ืœืœ. ืœืื—ืจ ื”ืฉืœื‘ื™ื ื”ืืœื”, ืืชื” ืืžื•ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ื•ืกื™ืฃ ืืช ื”ืคืจืžื˜ืจ ื”ืžื•ืชืื ืื™ืฉื™ืช ืฉืœื ื•.

ื‘ืžืกื•ืฃ NetXMS ืขื‘ื•ืจ ืืœ ืชืฆื•ืจืช ืื™ืกื•ืฃ ื ืชื•ื ื™ื ืฉืจืช ื ื™ืกื™ื•ื ื™ ืฉืขืœื™ื• ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœื ื˜ืจ ืชืขื•ื“ื•ืช ื•ืœื™ืฆื•ืจ ืฉื ืคืจืžื˜ืจ ื—ื“ืฉ (ื‘ืขืชื™ื“, ืœืื—ืจ ื”ื’ื“ืจื”, ื”ื’ื™ื•ื ื™ ืœื”ืขื‘ื™ืจ ืื•ืชื• ืœืชื‘ื ื™ื•ืช). ื‘ื—ืจ HTTPS.CertificateExpireDateSimple ืžื”ืจืฉื™ืžื”, ื”ื–ืŸ ืชื™ืื•ืจ ืขื ืฉื ื‘ืจื•ืจ, ื”ื’ื“ืจ ืืช ื”ืกื•ื’ ืœืžืกืคืจ ืฉืœื ื•ื”ื’ื“ืจ ืืช ืžืจื•ื•ื— ื”ืกืงืจ. ืœืžื˜ืจื•ืช ืื™ืชื•ืจ ื‘ืื’ื™ื, ื”ื’ื™ื•ื ื™ ืœืขืฉื•ืช ืืช ื–ื” ืงืฆืจ ื™ื•ืชืจ, 30 ืฉื ื™ื•ืช, ืœืžืฉืœ. ื”ื›ืœ ืžื•ื›ืŸ, ื–ื” ืžืกืคื™ืง ื‘ื™ื ืชื™ื™ื.

ืืชื” ื™ื›ื•ืœ ืœื‘ื“ื•ืง... ืœื, ื–ื” ืžื•ืงื“ื ืžื“ื™. ืขื›ืฉื™ื•, ื›ืžื•ื‘ืŸ, ืœื ื ืงื‘ืœ ื›ืœื•ื. ืคืฉื•ื˜ ื›ื™ ื”ืชืกืจื™ื˜ ืขื“ื™ื™ืŸ ืœื ื ื›ืชื‘. ื‘ื•ืื• ื ืชืงืŸ ืืช ื”ืžื—ื“ืœ ื”ื–ื”. ื”ืกืงืจื™ืคื˜ ืคืฉื•ื˜ ื™ืฆื™ื’ ืžืกืคืจ, ืžืกืคืจ ื”ื™ืžื™ื ืฉื ื•ืชืจื• ืขื“ ืœืชื•ืงืฃ ื”ืชืขื•ื“ื”. ื”ืžื™ื ื™ืžืœื™ ืžื›ื•ืœื ืฉื™ืฉ. ืชืกืจื™ื˜ ืœื“ื•ื’ืžื”:

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
}

ืžืชื‘ืจืจ ื›ืš:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

723 ื™ืžื™ื, ื ื•ืชืจื• ื›ืžืขื˜ ืฉื ืชื™ื™ื ืขื“ ืœืคืงื™ืขืช ื”ืชืขื•ื“ื”. ื–ื” ื”ื’ื™ื•ื ื™, ื›ื™ ื”ื•ืฆืืชื™ ืžื—ื“ืฉ ืชืขื•ื“ื•ืช ืขื‘ื•ืจ ืกืคืกืœ ื”ื‘ื“ื™ืงื” ืฉืœ Exchange ืœืื—ืจื•ื ื”.

ื–ื• ื”ื™ื™ืชื” ืื•ืคืฆื™ื” ืงืœื”. ื›ื ืจืื” ืฉืžื™ืฉื”ื• ื™ื”ื™ื” ืžืจื•ืฆื” ืžื–ื”, ืื‘ืœ ืจืฆื™ื ื• ื™ื•ืชืจ. ื”ืฆื‘ื ื• ืœืขืฆืžื ื• ืืช ื”ืžืฉื™ืžื” ืœื”ืฉื™ื’ ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืชืขื•ื“ื•ืช ื‘ืฉืจืช, ืœืคื™ ืฉื, ื•ืœื›ืœ ืื—ื“ ืœืจืื•ืช ืืช ืžืกืคืจ ื”ื™ืžื™ื ืฉื ื•ืชืจื• ืขื“ ืœืคืงื™ืขืช ื”ืชืขื•ื“ื”.

ื”ืืคืฉืจื•ืช ื”ืฉื ื™ื™ื”, ืงืฆืช ื™ื•ืชืจ ืžืกื•ื‘ืš.

ืฉื•ื‘ ืื ื• ืขื•ืจื›ื™ื ืืช ืชืฆื•ืจืช ื”ืกื•ื›ืŸ ื•ืฉื, ื‘ืžืงื•ื ื”ืฉื•ืจื” ืขื ExternalParameter, ืื ื• ื›ื•ืชื‘ื™ื ืฉื ื™ื™ื ืื—ืจื™ื:

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

ะ’ ืจืฉื™ืžื” ื—ื™ืฆื•ื ื™ืช ืื ื—ื ื• ืจืง ืžืงื‘ืœื™ื ืจืฉื™ืžื” ืฉืœ ืžื—ืจื•ื–ื•ืช. ื‘ืžืงืจื” ืฉืœื ื•, ืจืฉื™ืžื” ืฉืœ ืžื—ืจื•ื–ื•ืช ืขื ืฉืžื•ืช ืชืขื•ื“ื•ืช. ื ืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ืฉื•ืจื•ืช ืืœื• ื‘ืืžืฆืขื•ืช ื”ืชืกืจื™ื˜. ืจืฉื™ืžืช ืฉืžื•ืช - HTTPS.CertificateNames.

ืกืงืจื™ืคื˜ 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)"
    }
}

ื•ื›ื‘ืจ ื‘ืคื ื™ื ืคืจืžื˜ืจ ื—ื™ืฆื•ื ื™ ืื ื• ืžื–ื™ื ื™ื ืฉื•ืจื•ืช ืžืจืฉื™ืžืช ExternalList, ื•ื‘ืคืœื˜ ืื ื• ืžืงื‘ืœื™ื ืืช ืื•ืชื• ืžืกืคืจ ื™ืžื™ื ืขื‘ื•ืจ ื›ืœ ืื—ื“. ื”ืžื–ื”ื” ื”ื•ื ื˜ื‘ื™ืขืช ื”ืืฆื‘ืข ืฉืœ ื”ืชืขื•ื“ื”. ืฉื™ื ืœื‘ ืฉ-HTTPS.CertificateExpireDate ืžื›ื™ืœ ื›ื•ื›ื‘ื™ืช (*) ื‘ื’ืจืกื” ื–ื•. ื–ื” ื”ื›ืจื—ื™ ื›ื“ื™ ืฉื”ื•ื ื™ืงื‘ืœ ืžืฉืชื ื™ื ื—ื™ืฆื•ื ื™ื™ื, ืจืง CertificateId ืฉืœื ื•.

ืกืงืจื™ืคื˜ 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)"
}

ื‘ืชืฆื•ืจืช ืื™ืกื•ืฃ ื”ื ืชื•ื ื™ื ืฉืœ ื”ืฉืจืช, ืื ื• ื™ื•ืฆืจื™ื ืคืจืžื˜ืจ ื—ื“ืฉ. ื‘ืคืจืžื˜ืจ ืื ื• ื‘ื•ื—ืจื™ื ืืช ืฉืœื ื• HTTPS.CertificateExpireDate(*) ืžื”ืจืฉื™ืžื”, ื•(ืฉื™ื ืœื‘!) ืฉื ื” ืืช ื”ื›ื•ื›ื‘ื™ืช ืœ {ืœืžืฉืœ}. ื ืงื•ื“ื” ื—ืฉื•ื‘ื” ื–ื• ืชืืคืฉืจ ืœื›ื ืœื™ืฆื•ืจ ืžื•ื ื” ื ืคืจื“ ืœื›ืœ ืžื•ืคืข (ืชืขื•ื“ื”). ื”ืฉืืจ ืžืžื•ืœืื™ื ื›ืžื• ื‘ื’ืจืกื” ื”ืงื•ื“ืžืช:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื›ื“ื™ ืฉื™ื”ื™ื” ืœืš ืžืžื” ืœื™ืฆื•ืจ ืžื•ื ื™ื, ื‘ืœืฉื•ื ื™ืช ื’ื™ืœื•ื™ ืžื•ืคืขื™ื ืืชื” ืฆืจื™ืš ืœื‘ื—ื•ืจ ืจืฉื™ืžืช ืกื•ื›ืŸ ืžื”ืจืฉื™ืžื” ื•ื‘ืฉื“ื” ืฉื ืจืฉื™ืžื” ืœื”ื–ื™ืŸ ืืช ื”ืฉื ืฉืœ ExternalList ืฉืœื ื• ืžื”ืกืงืจื™ืคื˜ - HTTPS.CertificateNames.

ื›ืžืขื˜ ืžื•ื›ืŸ, ื”ืžืชืŸ ืžืขื˜ ืื• ื›ืคื” ืกืงืจ > ืชืฆื•ืจื” ื•ืกืงืจ > ื’ื™ืœื•ื™ ืžื•ืคืข ืื ื–ื” ื‘ืœืชื™ ืืคืฉืจื™ ืœื—ืœื•ื˜ื™ืŸ ืœื—ื›ื•ืช. ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžืงื‘ืœื™ื ืืช ื›ืœ ื”ืชืขื•ื“ื•ืช ืฉืœื ื• ืขื ืชืงื•ืคื•ืช ืชื•ืงืฃ:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ืžื” ืืชื” ืฆืจื™ืš? ื•ื‘ื›ืŸ, ื›ืŸ, ืจืง ืชื•ืœืขืช ื”ืคืจืคืงืฆื™ื•ื ื™ื–ื ืžื‘ื™ื˜ื” ื‘ื˜ื‘ื™ืขืช ื”ืื’ื•ื“ืœ ื”ืžื™ื•ืชืจืช ื”ื–ื• ื‘ืฉื ื”ื“ืœืคืง ื‘ืขื™ื ื™ื™ื ืขืฆื•ื‘ื•ืช ื•ืœื ื ื•ืชื ืช ืœื™ ืœืกื™ื™ื ืืช ื”ื›ืชื‘ื”. ื›ื“ื™ ืœื”ื–ื™ืŸ ืื•ืชื•, ืคืชื— ืฉื•ื‘ ืืช ืžืืคื™ื™ื ื™ ื”ืžื•ื ื” ื•ื‘ื›ืจื˜ื™ืกื™ื™ื” ื’ื™ืœื•ื™ ืžื•ืคืขื™ื, ื‘ืฉื“ื” "ืกืงืจื™ืคื˜ ืžืกื ืŸ ื’ื™ืœื•ื™ ืžื•ืคืข", ื”ื•ืกืฃ ืืช ื–ื” ืฉื ื›ืชื‘ ื‘ NXSL (ืฉืคื” ืคื ื™ืžื™ืช ืฉืœ NetXMS) ืกืงืจื™ืคื˜:

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

ืฉื™ืกื ืŸ ื˜ื‘ื™ืขืช ืืฆื‘ืข:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื•ื›ื“ื™ ืœื”ืฆื™ื’ ืื•ืชื• ืžืกื•ื ืŸ, ื‘ื›ืจื˜ื™ืกื™ื™ื” ื›ืœืœื™ ื‘ืฉื“ื” ืชื™ืื•ืจ, ืฉื ื” ืืช CertificateExpireDate: {instance} ืœ- CertificateExpireDate: {instance-name}:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื–ื”ื•, ืกื•ืฃ ืกื•ืฃ ืงื• ื”ืกื™ื•ื ืž-KDPV:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื”ืื ื–ื” ื™ื•ืคื™?

ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœื”ื’ื“ื™ืจ ื”ืชืจืื•ืช ื›ืš ืฉื™ื’ื™ืขื• ื‘ืžื™ื™ืœ ื›ืฉื™ืคื•ื’ ื”ืื™ืฉื•ืจ.

1. ืจืืฉื™ืช ืขืœื™ื ื• ืœื™ืฆื•ืจ ืชื‘ื ื™ืช ืื™ืจื•ืข ื›ื“ื™ ืœื”ืคืขื™ืœ ืื•ืชื” ื›ืืฉืจ ืขืจืš ื”ืžื•ื ื” ื™ื•ืจื“ ืœืกืฃ ื›ืœืฉื”ื• ืฉื”ื’ื“ืจื ื•. IN ืชืฆื•ืจืช ืื™ืจื•ืข ื‘ื•ืื• ื ื™ืฆื•ืจ ืฉืชื™ ืชื‘ื ื™ื•ืช ื—ื“ืฉื•ืช ืขื ืฉืžื•ืช ื›ืžื• CertificateExpireDate_Threshold_Activate ืขื ืกื˜ื˜ื•ืก ืื–ื”ืจื”:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื•ื“ื•ืžื” CertificateExpireDate_Threshold_Deactivate ืขื ืžืฆื‘ ืจื’ื™ืœ.

2. ืœืื—ืจ ืžื›ืŸ, ืขื‘ื•ืจ ืืœ ืžืืคื™ื™ื ื™ ื”ืžื•ื ื” ื•ื”ื’ื“ืจ ืืช ื”ืกืฃ ื‘ืœืฉื•ื ื™ืช ื˜ืจืกholds:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื›ืืฉืจ ืื ื• ื‘ื•ื—ืจื™ื ืืช ื”ืื™ืจื•ืขื™ื ืฉื ื•ืฆืจื• CertificateExpireDate_Threshold_Activate ื•-CertificateExpireDate_Threshold_Deactivate, ืžื’ื“ื™ืจื™ื ืืช ืžืกืคืจ ื”ื“ื’ื™ืžื•ืช (Samples) ืœ-1 (ื‘ืžื™ื•ื—ื“ ืขื‘ื•ืจ ื”ืžื•ื ื” ื”ื–ื” ืื™ืŸ ื˜ืขื ืœื”ื’ื“ื™ืจ ื™ื•ืชืจ), ื”ืขืจืš ื”ื•ื 30 (ื™ืžื™ื), ืœืžืฉืœ, ื•ื—ืฉื•ื‘ ืœื”ื’ื“ื™ืจ ื–ืžืŸ ื”ื—ื–ืจื” ืฉืœ ื”ืื™ืจื•ืข. ืœืชืขื•ื“ื•ืช ื‘ื™ื™ืฆื•ืจ, ืื ื™ ืžื’ื“ื™ืจ ืืช ื–ื” ืคืขื ื‘ื™ื•ื (86400 ืฉื ื™ื•ืช), ืื—ืจืช ืืชื” ื™ื›ื•ืœ ืœื˜ื‘ื•ืข ื‘ื”ืชืจืื•ืช (ืžื”, ืื’ื‘, ืงืจื” ืคืขื ืื—ืช, ืขื“ ื›ื“ื™ ื›ืš ืฉืชื™ื‘ืช ื”ื“ื•ืืจ ื”ื™ื™ืชื” ืžืœืื” ื‘ืกื•ืฃ ื”ืฉื‘ื•ืข). ืขื‘ื•ืจ ื–ืžืŸ ืื™ืชื•ืจ ื‘ืื’ื™ื, ื”ื’ื™ื•ื ื™ ืœื”ื’ื“ื™ืจ ืื•ืชื• ื ืžื•ืš ื™ื•ืชืจ, 60 ืฉื ื™ื•ืช, ืœืžืฉืœ.

3. ื‘ืชื•ืš ืชืฆื•ืจืช ืคืขื•ืœื” ืฆื•ืจ ืชื‘ื ื™ืช ืžื›ืชื‘ ื”ืชืจืื”, ื›ืš:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื›ืœ ืืœื” %m, %S ื•ื›ื•'. - ืคืงื•ื“ื•ืช ืžืืงืจื• ืฉื‘ื”ืŸ ื™ื•ื—ืœืคื• ืขืจื›ื™ื ืžื”ืคืจืžื˜ืจ ืฉืœื ื•. ื”ื ืžืชื•ืืจื™ื ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื‘ ืžื“ืจื™ืš ืœ NetXMS.

4. ื•ืœื‘ืกื•ืฃ, ืฉื™ืœื•ื‘ ื”ื ืงื•ื“ื•ืช ื”ืงื•ื“ืžื•ืช, ืœืชื•ืš ืžื“ื™ื ื™ื•ืช ืขื™ื‘ื•ื“ ืื™ืจื•ืขื™ื ืฆื•ืจ ื›ืœืœ ืœืคื™ื• ืชื™ื•ื•ืฆืจ ืื–ืขืงื” ื•ื™ื™ืฉืœื— ืžื›ืชื‘:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ืื ื—ื ื• ืฉื•ืžืจื™ื ืืช ื”ืคื•ืœื™ืกื”, ื”ื›ืœ ื ื™ืชืŸ ืœื‘ื“ื™ืงื”. ื‘ื•ืื• ื ื’ื“ื™ืจ ืืช ื”ืกืฃ ื’ื‘ื•ื” ื™ื•ืชืจ ื›ื“ื™ ืœื‘ื“ื•ืง. ื”ืื™ืฉื•ืจ ื”ืงืจื•ื‘ ื‘ื™ื•ืชืจ ืฉืœื™ ื™ืคื•ื’ ื‘ืขื•ื“ 723 ื™ืžื™ื, ื”ื’ื“ืจืชื™ ืื•ืชื• ืœ-724 ื›ื“ื™ ืœื‘ื“ื•ืง. ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžืงื‘ืœื™ื ืืช ื”ืื–ืขืงื” ื”ื‘ืื”:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื•ื”ืชืจืืช ื”ืื™ืžื™ื™ืœ ื”ื–ื•:

ื ื™ื˜ื•ืจ ืชืืจื™ืš ืชืคื•ื’ื” ืฉืœ ืื™ืฉื•ืจ ื‘-Windows ื‘-NetXMS

ื–ื” ื”ื›ืœ ื‘ื˜ื•ื— ืขื›ืฉื™ื•. ืืคืฉืจ, ื›ืžื•ื‘ืŸ, ืœื”ืงื™ื ืœื•ื— ืžื—ื•ื•ื ื™ื ื•ืœื‘ื ื•ืช ื’ืจืคื™ื, ืื‘ืœ ืขื‘ื•ืจ ืชืขื•ื“ื•ืช ืืœื” ื™ื”ื™ื• ืงื•ื•ื™ื ื™ืฉืจื™ื ืงืฆืช ื—ืกืจื™ ืžืฉืžืขื•ืช ื•ืžืฉืขืžืžื™ื, ื‘ื ื™ื’ื•ื“ ืœื’ืจืคื™ื ืฉืœ ืขื•ืžืก ืžืขื‘ื“ ืื• ื–ื™ื›ืจื•ืŸ, ืœืžืฉืœ. ืื‘ืœ, ืขื•ื“ ืขืœ ื–ื” ื‘ืคืขื ืื—ืจืช.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”