ΠΠ΅ΠΎΡΠ΄Π°Π²Π½Π° Ρ Π½Π°Ρ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ Π·Π°Π΄Π°ΡΠ° Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΡΠΎΠΊΠ° Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ Π½Π° 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: ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° (Edit agentβs configuration file), ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°ΠΉΡΠ΅, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ Save & Apply, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ ΡΡΡΠΎΡΠΎ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ (Poll > Configuration), Π°ΠΊΠΎ Π½ΡΠΌΠ°ΡΠ΅ ΡΠΈΠ»ΠΈ Π΄Π° ΡΠ°ΠΊΠ°ΡΠ΅. Π‘Π»Π΅Π΄ ΡΠ΅Π·ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π°ΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
Π ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π° NetXMS ΠΎΡΠΈΠ²Π°ΠΌΠ΅ Π² Data Collection Configuration ΠΠ° ΡΠ΅ΡΡΠΎΠ²ΠΈΡ ΡΡΡΠ²ΡΡ, Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅, ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ (ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΡΠ»Π΅Π΄ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°, ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° Π³ΠΎ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅). ΠΠ·Π±ΠΈΡΠ°ΠΌΠ΅ HTTPS.CertificateExpireDateSimple ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ°, Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΠΎ ΠΈΠΌΠ΅, ΡΠΈΠΏΠ° Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Π½Π° Integer ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° Π·Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ. ΠΠ° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π΅ ΡΠ°Π·ΡΠΌΠ½ΠΎ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎ-ΠΊΡΠ°ΡΡΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 30 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΡΠΈΡΠΊΠΎ, Π³ΠΎΡΠΎΠ²ΠΎ Π΅, Π·Π°ΡΠ΅Π³Π° Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ... Π½Π΅, ΠΎΡΠ΅ Π΅ ΡΠ°Π½ΠΎ. Π‘Π΅Π³Π°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½ΡΠΌΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½ΠΈΡΠΎ. ΠΡΠΎΡΡΠΎ Π·Π°ΡΠΎΡΠΎ ΡΠΊΡΠΈΠΏΡΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½. ΠΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π° ΠΏΡΠΎΠΏΡΡΠΊΠ°Π½Π΅. Π‘ΠΊΡΠΈΠΏΡΡΡ ΡΠ΅ ΠΈΠ·Π²Π°ΠΆΠ΄Π° ΠΏΡΠΎΡΡΠΎ ΡΠΈΡΠ»ΠΎ, Π±ΡΠΎΡ Π½Π° Π΄Π½ΠΈΡΠ΅, ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π΄ΠΎ ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°. ΠΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Π½Π°Π»ΠΈΡΠ½ΠΈ. ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠΊΡΠΈΠΏΡ:
try {
# ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΠΎΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅
$lmCertificates = @( Get-ChildItem -Recurse -path 'Cert:LocalMachineMy' -ErrorAction Stop )
# ΠΠΊΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π½ΡΠΌΠ°, Π²ΡΡΠ½ΠΈ "10 Π³ΠΎΠ΄ΠΈΠ½ΠΈ"
if ($lmCertificates.Count -eq 0) { return 3650 }
# ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π΄Π°ΡΠΈΡΠ΅ Π½Π° ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ
$expirationDates = @( $lmCertificates | ForEach-Object { return $_.NotAfter } )
# ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠ°ΡΠ° Π΄Π°ΡΠ° Π½Π° ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ ΠΎΡ Π²ΡΠΈΡΠΊΠΈΡΠ΅
$minExpirationDate = ($expirationDates | Measure-Object -Minimum -ErrorAction Stop ).Minimum
# ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠ°ΡΠ° Π΄Π°ΡΠ° Π½Π° ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ Π² Π±ΡΠΎΠΉ ΠΎΡΡΠ°Π²Π°ΡΠΈ Π΄Π½ΠΈ, Π·Π°ΠΊΡΡΠ³Π»ΡΠ²Π°ΠΉΠΊΠΈ Π½Π°Π΄ΠΎΠ»Ρ
$daysLeft = [Math]::Floor( ($minExpirationDate - [DateTime]::Now).TotalDays )
# ΠΡΡΡΠ°ΠΌΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ°
return $daysLeft
}
catch {
return -1
}ΠΠΎΠ»ΡΡΠ°Π²Π° ΡΠ΅ ΡΠ°ΠΊΠ°:

723 Π΄Π½ΠΈ, Π΄ΠΎ ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΎΡΡΠ°Π²Π°Ρ ΠΏΠΎΡΡΠΈ Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. ΠΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Exchange Π³ΠΈ ΠΏΠΎΠ΄Π½ΠΎΠ²ΠΈΡ
ΡΡΠ²ΡΠ΅ΠΌ Π½Π°ΡΠΊΠΎΡΠΎ.
Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΏΡΠΎΡΡ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΠΎΠΆΠ΅ Π±ΠΈ Π½ΡΠΊΠΎΠΉ ΡΠ΅ ΡΠ΅ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΠΈ ΠΈ Ρ ΡΠ°ΠΊΡΠ², Π½ΠΎ Π½ΠΈΠ΅ ΠΈΡΠΊΠ°Ρ ΠΌΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅. ΠΠΎΡΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΡΠΈ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΏΠΈΡΡΠΊ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π½Π° ΡΡΡΠ²Π΅ΡΠ°, ΠΏΠΎΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΈ Π·Π° Π²ΡΠ΅ΠΊΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎ Π΄Π½ΠΈ ΠΎΡΡΠ°Π²Π°Ρ Π΄ΠΎ ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°.
ΠΡΠΎΡΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΎ.
ΠΡΠ½ΠΎΠ²ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π°Π³Π΅Π½ΡΠ° ΠΈ ΡΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π΄Π° Ρ ExternalParameter ΠΏΠΈΡΠ΅ΠΌ Π΄Π²Π΅ Π΄ΡΡΠ³ΠΈ:
ExternalList = HTTPS.CertificateNames: powershell.exe -File "serversharenetxms_CertExternalNames.ps1"
ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -File "serversharenetxms_CertExternalParameter.ps1" -CertificateId "$1"Π ExternalList ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠΏΠΈΡΡΠΊ Ρ Π½ΠΈΠ·ΠΎΠ²Π΅. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ, ΡΠΏΠΈΡΡΠΊ Ρ ΠΈΠΌΠ΅Π½Π° Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ. Π’ΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ ΠΎΡ Π½ΠΈΠ·ΠΎΠ²Π΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΡ ΡΠΊΡΠΈΠΏΡΠ°. ΠΠΌΠ΅ΡΠΎ Π½Π° ΡΠΏΠΈΡΡΠΊΠ° β 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)"
}
}Π Π²Π΅ΡΠ΅ Π² ExternalParameter ΠΠ° Π²Ρ ΠΎΠ΄ ΠΏΠΎΠ΄Π°Π΅ΠΌ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ExternalList, Π° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΡΡΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½ΠΈ Π·Π° Π²ΡΡΠΊΠ°. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡΡ Π΅ Thumbprint Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ 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)"
}Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΡΡΡΠ²ΡΡΠ° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. Π Parameter ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡ HTTPS.CertificateExpireDate(*) ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° ΠΈ, (Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!) ΠΏΡΠΎΠΌΠ΅Π½ΡΠΌΠ΅ Π·Π²Π΅Π·Π΄ΠΈΡΠΊΠ°ΡΠ° Π½Π° {instance}. Π’Π°Π·ΠΈ Π²Π°ΠΆΠ½Π° ΡΠΎΡΠΊΠ° ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ Π±ΡΠΎΡΡ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΡΠ°Π½Ρ (ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ). ΠΡΡΠ°Π½Π°Π»ΠΎΡΠΎ ΡΠ΅ ΠΏΠΎΠΏΡΠ»Π²Π° ΠΊΠ°ΠΊΡΠΎ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ Π²Π°ΡΠΈΠ°Π½Ρ:

ΠΠ° Π΄Π° ΠΈΠΌΠ° ΠΎΡ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π±ΡΠΎΡΡΠΈ, Π½Π° ΡΠ°Π±Π° Instance Discovery ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ Agent List ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° ΠΈ Π² ΠΏΠΎΠ»Π΅ΡΠΎ List Name Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠΈΡ ExternalList ΠΎΡ ΡΠΊΡΠΈΠΏΡΠ° β HTTPS.CertificateNames.
ΠΠΎΡΡΠΈ Π΅ Π³ΠΎΡΠΎΠ²ΠΎ, ΠΌΠ°Π»ΠΊΠΎ Π΄Π° ΠΏΠΎΠΈΠ·ΡΠ°ΠΊΠ°ΠΌΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Poll > Configuration ΠΈ Poll > Instance Discovery, Π°ΠΊΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°ΠΊΠ°ΠΌΠ΅. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½Π°ΡΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΡΡΡ ΡΡΠΎΠΊΠΎΠ²Π΅ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅:
Π’ΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π°? ΠΠ°, ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΠΉΡΠ΅ΡΠΎ Π½Π° ΠΏΠ΅ΡΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΠ·ΠΌΠ° Π³Π»Π΅Π΄Π° Π½Π° ΡΠΎΠ·ΠΈ Π½Π΅Π½ΡΠΆΠ΅Π½ Thumbprint Π² ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π±ΡΠΎΡΡΠ° Ρ ΡΡΠΆΠ½ΠΈ ΠΎΡΠΈ ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π·Π°Π²ΡΡΡΠ° ΡΡΠ°ΡΠΈΡΡΠ°. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°Ρ ΡΠ°Π½Ρ, ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΎΡΠ²Π°ΡΡΠΌΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° Π±ΡΠΎΡΡΠ° ΠΈ Π½Π° ΡΠ°Π±Π° Instance Discovery Π² ΠΏΠΎΠ»Π΅ΡΠΎ βInstance discovery filter scriptβ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π° (Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ Π΅Π·ΠΈΠΊ Π½Π° NetXMS) ΡΠΊΡΠΈΠΏΡ:
instance = $1;
if (instance ~= "^(.*)s-s[T:[a-zA-Z0-9]+]$")
{
return %(true, instance, $1);
}
return true;ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠΈΠ»ΡΡΠΈΡΠ° Thumbprint:

Π Π·Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΡΡΠΈΠ»ΡΡΠΈΡΠ°Π½, Π½Π° ΡΠ°Π±Π° General Π² ΠΏΠΎΠ»Π΅ΡΠΎ Description ΠΏΡΠΎΠΌΠ΅Π½ΡΠΌΠ΅ CertificateExpireDate: {instance} Π½Π° CertificateExpireDate: {instance-name}:

ΠΡΠΈΡΠΊΠΎ, Π½Π°ΠΊΡΠ°Ρ ΡΠΈΠ½ΠΈΡ ΠΎΡ ΠΠΠΠ:
ΠΡΠ°ΡΠΎΡΠ° Π»ΠΈ?
ΠΡΡΠ°Π½Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΈΠ·Π²Π΅ΡΡΠΈΡΡΠ°, Π·Π° Π΄Π° ΠΈΠ΄Π²Π°Ρ Π½Π° ΠΈΠΌΠ΅ΠΉΠ», ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠΎΠΊΡΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° Π΄ΠΎΠ±Π»ΠΈΠΆΠ°Π²Π° Π»ΠΎΠ³ΠΈΡΠ½ΠΈΡ ΡΠΈ ΠΊΡΠ°ΠΉ.
1. ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ (Event Template) Π·Π° Π°ΠΊΡΠΈΠ²Π°ΡΠΈΡ ΠΏΡΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π±ΡΠΎΡΡΠ° ΠΏΠΎΠ΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΡ Π½Π°Ρ ΠΏΡΠ°Π³. Π Event Configuration ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΄Π²Π° Π½ΠΎΠ²ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° Ρ ΠΈΠΌΠ΅Π½Π°, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ CertificateExpireDate_Threshold_Activate ΡΡΡ ΡΡΠ°ΡΡΡ Warning:

ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ CertificateExpireDate_Threshold_Deactivate ΡΡΡ ΡΡΠ°ΡΡΡ Normal.
2. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΡΠΈΠ²Π°ΠΌΠ΅ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° Π±ΡΠΎΡΡΠ° ΠΈ Π½Π° ΡΠ°Π±Π° Tresholds Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΠΌΠ΅ ΠΏΡΠ°Π³Π°:

ΠΡΠ΄Π΅ ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΡΡΠ±ΠΈΡΠΈΡ CertificateExpireDate_Threshold_Activate ΠΈ CertificateExpireDate_Threshold_Deactivate, Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Π±ΡΠΎΠΉ Π½Π° ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½ΠΈΡΡΠ° (Samples) 1 (ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π·Π° ΡΠΎΠ·ΠΈ Π±ΡΠΎΡΡ Π½ΡΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅), ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΎΡ 30 (Π΄Π½ΠΈ), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ, Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ. ΠΠ° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ Π·Π°Π΄Π°Π²Π°ΠΌ Π²Π΅Π΄Π½ΡΠΆ Π½Π° Π΄Π΅Π½ (86400 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ), Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ Π·Π°ΡΡΡΠΏΠ°ΠΌΠ΅ Ρ ΠΈΠ·Π²Π΅ΡΡΠΈΡ (ΠΊΠΎΠ΅ΡΠΎ, ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, ΡΠ΅ ΡΠ»ΡΡΠΈ Π²Π΅Π΄Π½ΡΠΆ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎΡΠ΅Π½ΡΠΊΠ°ΡΠ° ΠΊΡΡΠΈΡ ΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ»Π½ΠΈ Π·Π° ΠΏΠΎΡΠΈΠ²Π½ΠΈΡΠ΅ Π΄Π½ΠΈ). ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 60 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
3. Π ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½ Π·Π° ΡΠ²Π΅Π΄ΠΎΠΌΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΈΡΠΌΠΎ, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡ:

ΠΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ %m, %S ΠΈ Ρ.Π½. β ΠΌΠ°ΠΊΡΠΎΡΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΎΡ Π½Π°ΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΡ
Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π² NetXMS.
4. Π Π½Π°ΠΊΡΠ°Ρ, ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°ΠΉΠΊΠΈ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ, Π² ΠΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π‘ΡΠ±ΠΈΡΠΈΡ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΠΎ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π°Π»Π°ΡΠΌΠ° ΠΈ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΏΠΈΡΠΌΠΎ:
ΠΠ°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ°, Π²ΡΠΈΡΠΊΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅. Π©Π΅ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊ ΠΏΡΠ°Π³ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°. ΠΠΎΡΡ Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΡΠΊ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΈΠ·ΡΠΈΡΠ° ΡΠ»Π΅Π΄ 723 Π΄Π½ΠΈ, Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π°Π΄Π°Π΄ΠΎΡ 724. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠ°ΠΊΠ°Π²Π° Π°Π»Π°ΡΠΌΠ°:

ΠΈ ΡΠ°ΠΊΠΎΠ²Π° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅ΠΉΠ»:

Π‘Π΅Π³Π° Π²Π΅ΡΠ΅ Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ Π²ΡΠΈΡΠΊΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΡΠ°Π±Π»ΠΎΡΠΎ, Π΄Π° ΠΏΠΎΡΡΡΠΎΠΈΠΌ Π³ΡΠ°ΡΠΈΠΊΠΈ, Π½ΠΎ Π·Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π±Π΅Π·ΡΠΌΠΈΡΠ»Π΅Π½ΠΈ ΠΈ ΡΠΊΡΡΠ½ΠΈ ΠΏΡΠ°Π²ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π·Π° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ Π³ΡΠ°ΡΠΈΡΠΈΡΠ΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΈΠ»ΠΈ ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎ Π·Π° ΡΠΎΠ²Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
