fix: allow null SacOccurredAt on lifecycle notifications (2.0.15-SAC)

PS 5.1 rejects binding null to [datetime]; use optional splatting for SAC occurred_at.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
PTah
2026-06-03 11:45:35 +10:00
parent 550cea9759
commit f08a8a8561
3 changed files with 57 additions and 13 deletions
+15 -4
View File
@@ -89,7 +89,7 @@ $script:SkipLogDetailLimit = 15
# строки ниже, если правки «мелкие» и вы не хотите менять отображаемую версию в логах). # строки ниже, если правки «мелкие» и вы не хотите менять отображаемую версию в логах).
# Рекомендация: при значимых релизах меняйте и $ScriptVersion, и version.txt одинаково; при только # Рекомендация: при значимых релизах меняйте и $ScriptVersion, и version.txt одинаково; при только
# исправлениях на шаре — достаточно поднять patch в version.txt (например 1.3.0.1). # исправлениях на шаре — достаточно поднять patch в version.txt (например 1.3.0.1).
$ScriptVersion = "2.0.14-SAC" $ScriptVersion = "2.0.15-SAC"
# Логи (все под InstallRoot) # Логи (все под InstallRoot)
$LogFile = Join-Path $script:InstallRoot "Logs\login_monitor.log" $LogFile = Join-Path $script:InstallRoot "Logs\login_monitor.log"
@@ -978,7 +978,7 @@ function Send-MonitorNotification {
[string]$SacTitle = '', [string]$SacTitle = '',
[string]$SacSummary = '', [string]$SacSummary = '',
[hashtable]$SacDetails = $null, [hashtable]$SacDetails = $null,
[datetime]$SacOccurredAt = $null $SacOccurredAt = $null
) )
$title = if (-not [string]::IsNullOrWhiteSpace($SacTitle)) { $SacTitle } else { $EmailSubject } $title = if (-not [string]::IsNullOrWhiteSpace($SacTitle)) { $SacTitle } else { $EmailSubject }
@@ -992,8 +992,19 @@ function Send-MonitorNotification {
if ($script:SacClientLoaded -and (Get-Command Send-NotifyOrSac -ErrorAction SilentlyContinue)) { if ($script:SacClientLoaded -and (Get-Command Send-NotifyOrSac -ErrorAction SilentlyContinue)) {
$sacMode = Get-SacNormalizedMode $sacMode = Get-SacNormalizedMode
if ($sacMode -ne 'off') { if ($sacMode -ne 'off') {
return Send-NotifyOrSac -EventType $etype -Severity $SacSeverity -Title $title -Summary $summary ` $sacNotifyArgs = @{
-TelegramMessage $Message -EmailSubject $EmailSubject -Details $SacDetails -OccurredAt $SacOccurredAt EventType = $etype
Severity = $SacSeverity
Title = $title
Summary = $summary
TelegramMessage = $Message
EmailSubject = $EmailSubject
Details = $SacDetails
}
if ($null -ne $SacOccurredAt) {
$sacNotifyArgs['OccurredAt'] = $SacOccurredAt
}
return Send-NotifyOrSac @sacNotifyArgs
} }
} }
+41 -8
View File
@@ -342,7 +342,7 @@ function New-SacEventPayload {
[Parameter(Mandatory = $true)][string]$Title, [Parameter(Mandatory = $true)][string]$Title,
[Parameter(Mandatory = $true)][string]$Summary, [Parameter(Mandatory = $true)][string]$Summary,
[hashtable]$Details = $null, [hashtable]$Details = $null,
[datetime]$OccurredAt = $null $OccurredAt = $null
) )
$Title = Limit-SacString -Text $Title -MaxLen 256 -Label 'title' $Title = Limit-SacString -Text $Title -MaxLen 256 -Label 'title'
@@ -656,7 +656,7 @@ function Send-SacEvent {
[Parameter(Mandatory = $true)][string]$Title, [Parameter(Mandatory = $true)][string]$Title,
[Parameter(Mandatory = $true)][string]$Summary, [Parameter(Mandatory = $true)][string]$Summary,
[hashtable]$Details = $null, [hashtable]$Details = $null,
[datetime]$OccurredAt = $null $OccurredAt = $null
) )
if (-not (Test-SacConfigured)) { if (-not (Test-SacConfigured)) {
@@ -669,7 +669,17 @@ function Send-SacEvent {
$mergedDetails = $null $mergedDetails = $null
} }
$payload = $(New-SacEventPayload -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $mergedDetails -OccurredAt $OccurredAt) $payloadArgs = @{
EventType = $EventType
Severity = $Severity
Title = $Title
Summary = $Summary
Details = $mergedDetails
}
if ($null -ne $OccurredAt) {
$payloadArgs['OccurredAt'] = $OccurredAt
}
$payload = $(New-SacEventPayload @payloadArgs)
if ($payload -is [System.Array]) { if ($payload -is [System.Array]) {
$payload = $payload[-1] $payload = $payload[-1]
} }
@@ -731,6 +741,29 @@ function Merge-SacNotifyDetails {
return $merged return $merged
} }
function Get-SacEventInvokeArgs {
param(
[Parameter(Mandatory = $true)][string]$EventType,
[Parameter(Mandatory = $true)][string]$Severity,
[Parameter(Mandatory = $true)][string]$Title,
[Parameter(Mandatory = $true)][string]$Summary,
[hashtable]$Details = $null,
$OccurredAt = $null
)
$args = @{
EventType = $EventType
Severity = $Severity
Title = $Title
Summary = $Summary
Details = $Details
}
if ($null -ne $OccurredAt) {
$args['OccurredAt'] = $OccurredAt
}
return $args
}
function Send-NotifyOrSac { function Send-NotifyOrSac {
param( param(
[Parameter(Mandatory = $true)][string]$EventType, [Parameter(Mandatory = $true)][string]$EventType,
@@ -740,7 +773,7 @@ function Send-NotifyOrSac {
[string]$TelegramMessage = '', [string]$TelegramMessage = '',
[string]$EmailSubject = 'RDP Login Monitor', [string]$EmailSubject = 'RDP Login Monitor',
[hashtable]$Details = $null, [hashtable]$Details = $null,
[datetime]$OccurredAt = $null $OccurredAt = $null
) )
if ([string]::IsNullOrWhiteSpace($TelegramMessage)) { if ([string]::IsNullOrWhiteSpace($TelegramMessage)) {
@@ -755,7 +788,7 @@ function Send-NotifyOrSac {
return $false return $false
} }
$hbDetails = Merge-SacNotifyDetails -Details $Details -TelegramVia 'sac' $hbDetails = Merge-SacNotifyDetails -Details $Details -TelegramVia 'sac'
return (Send-SacEvent -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $hbDetails -OccurredAt $OccurredAt) return (Send-SacEvent @ (Get-SacEventInvokeArgs -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $hbDetails -OccurredAt $OccurredAt))
} }
switch ($mode) { switch ($mode) {
@@ -764,16 +797,16 @@ function Send-NotifyOrSac {
} }
'exclusive' { 'exclusive' {
$merged = Merge-SacNotifyDetails -Details $Details -TelegramVia 'sac' $merged = Merge-SacNotifyDetails -Details $Details -TelegramVia 'sac'
return (Send-SacEvent -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $merged -OccurredAt $OccurredAt) return (Send-SacEvent @ (Get-SacEventInvokeArgs -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $merged -OccurredAt $OccurredAt))
} }
'dual' { 'dual' {
$merged = Merge-SacNotifyDetails -Details $Details -TelegramVia 'agent' $merged = Merge-SacNotifyDetails -Details $Details -TelegramVia 'agent'
Send-SacEvent -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $merged -OccurredAt $OccurredAt | Out-Null Send-SacEvent @ (Get-SacEventInvokeArgs -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $merged -OccurredAt $OccurredAt) | Out-Null
return (Send-SacLocalChannels -TelegramMessage $TelegramMessage -EmailSubject $EmailSubject) return (Send-SacLocalChannels -TelegramMessage $TelegramMessage -EmailSubject $EmailSubject)
} }
'fallback' { 'fallback' {
$merged = Merge-SacNotifyDetails -Details $Details -TelegramVia 'sac' $merged = Merge-SacNotifyDetails -Details $Details -TelegramVia 'sac'
if (Send-SacEvent -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $merged -OccurredAt $OccurredAt) { if (Send-SacEvent @ (Get-SacEventInvokeArgs -EventType $EventType -Severity $Severity -Title $Title -Summary $Summary -Details $merged -OccurredAt $OccurredAt)) {
return $true return $true
} }
return (Send-SacLocalChannels -TelegramMessage $TelegramMessage -EmailSubject $EmailSubject) return (Send-SacLocalChannels -TelegramMessage $TelegramMessage -EmailSubject $EmailSubject)
+1 -1
View File
@@ -1 +1 @@
2.0.14-SAC 2.0.15-SAC