diff --git a/docs/ocsentinel-deployment.md b/docs/ocsentinel-deployment.md index 288ae42..9ca8ac5 100644 --- a/docs/ocsentinel-deployment.md +++ b/docs/ocsentinel-deployment.md @@ -34,7 +34,10 @@ powershell -ExecutionPolicy Bypass -File .\build\build-release-manifest.ps1 ` The installer creates two Windows Scheduled Tasks running as `SYSTEM`: -- `OCSentinel Daily Scan`: runs every day at `08:00` and uploads one signed report. +- `OCSentinel Daily Scan`: runs once per day and uploads one signed report. + The installer deterministically assigns each device a stable slot between + `04:00` and `06:59`, derived from its Windows `MachineGuid`. This distributes + a fleet rollout instead of sending all reports at the same time. - `OCSentinel Burst Check`: runs every five minutes. It performs no scan unless the NinjaOne device custom field `ocsentinelburst` is enabled. diff --git a/installer/install-ocsentinel.ps1 b/installer/install-ocsentinel.ps1 index 3ba42fb..1aff0dd 100644 --- a/installer/install-ocsentinel.ps1 +++ b/installer/install-ocsentinel.ps1 @@ -74,8 +74,21 @@ $scheduledScript = Join-Path $scriptRoot "run-ocsentinel-scheduled.ps1" $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest $taskSettings = New-ScheduledTaskSettingsSet -StartWhenAvailable -ExecutionTimeLimit (New-TimeSpan -Minutes 30) -MultipleInstances IgnoreNew +# Spread fleet uploads across the early-morning window while keeping each device's slot stable. +$machineGuid = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Cryptography" -Name "MachineGuid").MachineGuid +$guidBytes = [Text.Encoding]::UTF8.GetBytes([string]$machineGuid) +$sha256 = [Security.Cryptography.SHA256]::Create() +try { + $slotHash = $sha256.ComputeHash($guidBytes) +} +finally { + $sha256.Dispose() +} +$dailySlotMinutes = [BitConverter]::ToUInt32($slotHash, 0) % 180 +$dailyRunAt = (Get-Date -Hour 4 -Minute 0 -Second 0).AddMinutes($dailySlotMinutes) + $dailyAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$scheduledScript`" -Kind daily" -WorkingDirectory $scriptRoot -$dailyTrigger = New-ScheduledTaskTrigger -Daily -At 08:00 +$dailyTrigger = New-ScheduledTaskTrigger -Daily -At $dailyRunAt Register-ScheduledTask -TaskName "OCSentinel Daily Scan" -Action $dailyAction -Trigger $dailyTrigger -Principal $taskPrincipal -Settings $taskSettings -Description "OfficeCom Sentinel daily signed scan and upload." -Force | Out-Null $burstAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$scheduledScript`" -Kind burst" -WorkingDirectory $scriptRoot @@ -87,4 +100,4 @@ Write-Host "Main path: $installRoot" Write-Host "Runner: $(Join-Path $scriptRoot 'run-ocsentinel.ps1')" Write-Host "Monitor: $(Join-Path $scriptRoot 'run-ocsentinel-monitor.ps1')" Write-Host "Updater: $(Join-Path $scriptRoot 'update-ocsentinel.ps1')" -Write-Host "Schedule: Daily scan at 08:00; burst check every 5 minutes." +Write-Host "Schedule: Daily scan at $($dailyRunAt.ToString('HH:mm')) (deterministic 04:00-06:59 slot); burst check every 5 minutes." diff --git a/release/stable/version.json b/release/stable/version.json index 29a1d8f..2401fb6 100644 --- a/release/stable/version.json +++ b/release/stable/version.json @@ -1,8 +1,8 @@ { "channel": "stable", - "version": "1.3.0", - "publishedAtUtc": "2026-07-26T00:16:43.0355921Z", - "artifactUrl": "https://gitea.officecom.cloud/officecom/oc-sentinel/releases/download/v1.3.0/OCSentinelClient-win-x64.zip", - "sha256": "35dfc6e1022da0e7c4ae26d656c6c588365fd152deb5b29c1ff2d5ea95c8ac56", + "version": "1.3.2", + "publishedAtUtc": "2026-07-26T00:23:31.3024295Z", + "artifactUrl": "https://gitea.officecom.cloud/officecom/oc-sentinel/releases/download/v1.3.2/OCSentinelClient-win-x64.zip", + "sha256": "dbfedf0890176873cef8bc91b9f7a6d6c3c8382ffadc972324b9900bad1153cc", "minUpdaterVersion": "1.0.0" } diff --git a/src/OCSentinelCli/OCSentinelCli.csproj b/src/OCSentinelCli/OCSentinelCli.csproj index e7488e1..edbb527 100644 --- a/src/OCSentinelCli/OCSentinelCli.csproj +++ b/src/OCSentinelCli/OCSentinelCli.csproj @@ -9,10 +9,10 @@ OCSentinelCli OfficeCom Sentinel OfficeCom - 1.3.0 - 1.3.0.0 - 1.3.0.0 - 1.3.0 + 1.3.2 + 1.3.2.0 + 1.3.2.0 + 1.3.2