207 lines
7.8 KiB
PowerShell
207 lines
7.8 KiB
PowerShell
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$ServerHost,
|
|
[string[]]$Users,
|
|
[string]$UserListPath,
|
|
[string]$Domain,
|
|
[int]$ServerPort = 5600,
|
|
[ValidateSet('http', 'https')]
|
|
[string]$ServerScheme = 'http',
|
|
[string]$Version = 'v0.13.2',
|
|
[string]$PackageUrl,
|
|
[string]$PackageZipPath,
|
|
[string]$InstallRoot = 'C:\Program Files\AWatch-rus\bin',
|
|
[string]$StateRoot = 'C:\ProgramData\AWatch-rus',
|
|
[int]$PollSeconds = 5,
|
|
[int]$PulseSeconds = 30,
|
|
[int]$RecoveryIntervalSeconds = 180,
|
|
[bool]$AfkEnabled = $true,
|
|
[bool]$WindowEnabled = $true,
|
|
[bool]$FileOpsEnabled = $true,
|
|
[bool]$LocalAgentLogsEnabled = $false,
|
|
[bool]$IncidentCaptureEnabled = $true,
|
|
[bool]$IncidentScreenshotEnabled = $true,
|
|
[string]$IncidentArtifactsRoot,
|
|
[string]$EvtxExportRoot,
|
|
[int]$EvtxRetentionDays = 14,
|
|
[string[]]$EvtxChannels = @(),
|
|
[bool]$LogonMarkerEnabled = $true,
|
|
[bool]$ProcessEventsEnabled = $false,
|
|
[string]$AwHostname,
|
|
[string]$CustomRulesPath,
|
|
[string]$CustomPolicyPath,
|
|
[ValidateSet('local', 'server')]
|
|
[string]$PolicyMode = 'local',
|
|
[bool]$PolicyEngineEnabled = $false,
|
|
[string]$PolicyEngineHost,
|
|
[int]$PolicyEnginePort = 5601,
|
|
[ValidateSet('http', 'https')]
|
|
[string]$PolicyEngineScheme = 'http',
|
|
[int]$PolicyRefreshSeconds = 300,
|
|
[string]$PolicyCachePath,
|
|
[string]$ReportPath,
|
|
[bool]$HayabusaAutoUploadEnabled = $true,
|
|
[int]$HayabusaAutoUploadIntervalHours = 6,
|
|
[int]$HayabusaAutoUploadHoursBack = 6,
|
|
[string]$HayabusaAutoUploadMode = 'incident',
|
|
[string]$HayabusaAutoUploadTaskName = 'ActivityWatch Hayabusa Upload',
|
|
[bool]$File1CAutoUploadEnabled = $true,
|
|
[int]$File1CAutoUploadIntervalHours = 6,
|
|
[string]$File1CAutoUploadTaskName = 'ActivityWatch File1C Upload',
|
|
[string]$File1CTargetHost,
|
|
[string]$File1CTargetUser = 'igor',
|
|
[string]$File1CRegistryWorkbookPath = 'E:\USER1\СПИСОК ПРЕДПРИЯТИЙ И ИХ РАСПРЕДЕЛЕНИЕ.xlsx',
|
|
[switch]$SkipHardening,
|
|
[switch]$ValidateAfterDeploy,
|
|
[switch]$IntegrationTestEnabled
|
|
)
|
|
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$modulePath = Join-Path $PSScriptRoot 'ActivityWatch.Windows.Common.psm1'
|
|
Import-Module $modulePath -Force
|
|
|
|
Assert-Administrator
|
|
|
|
$resolvedUsers = Normalize-ActivityWatchUsers -Users $Users -UserListPath $UserListPath -Domain $Domain
|
|
$timestamp = Get-Date -Format 'yyyyMMdd-HHmmss'
|
|
$effectiveReportPath = if ($ReportPath) { $ReportPath } else { Join-Path $StateRoot "ensemble-report-$timestamp.json" }
|
|
$deployScript = Join-Path $PSScriptRoot 'deploy-domain-users.ps1'
|
|
$hardeningScript = Join-Path $PSScriptRoot 'hardening-recovery.ps1'
|
|
$validationScript = Join-Path $PSScriptRoot 'validate-deployment.ps1'
|
|
|
|
if (-not (Test-Path -LiteralPath $deployScript)) {
|
|
throw "Не найден скрипт: $deployScript"
|
|
}
|
|
|
|
& $deployScript `
|
|
-ServerHost $ServerHost `
|
|
-Users $resolvedUsers `
|
|
-ServerPort $ServerPort `
|
|
-ServerScheme $ServerScheme `
|
|
-Version $Version `
|
|
-PackageUrl $PackageUrl `
|
|
-PackageZipPath $PackageZipPath `
|
|
-InstallRoot $InstallRoot `
|
|
-StateRoot $StateRoot `
|
|
-PollSeconds $PollSeconds `
|
|
-PulseSeconds $PulseSeconds `
|
|
-RecoveryIntervalSeconds $RecoveryIntervalSeconds `
|
|
-AfkEnabled $AfkEnabled `
|
|
-WindowEnabled $WindowEnabled `
|
|
-FileOpsEnabled $FileOpsEnabled `
|
|
-LocalAgentLogsEnabled $LocalAgentLogsEnabled `
|
|
-IncidentCaptureEnabled $IncidentCaptureEnabled `
|
|
-IncidentScreenshotEnabled $IncidentScreenshotEnabled `
|
|
-IncidentArtifactsRoot $IncidentArtifactsRoot `
|
|
-EvtxExportRoot $EvtxExportRoot `
|
|
-EvtxRetentionDays $EvtxRetentionDays `
|
|
-EvtxChannels $EvtxChannels `
|
|
-LogonMarkerEnabled $LogonMarkerEnabled `
|
|
-ProcessEventsEnabled $ProcessEventsEnabled `
|
|
-AwHostname $AwHostname `
|
|
-CustomRulesPath $CustomRulesPath `
|
|
-CustomPolicyPath $CustomPolicyPath `
|
|
-PolicyMode $PolicyMode `
|
|
-PolicyEngineEnabled $PolicyEngineEnabled `
|
|
-PolicyEngineHost $PolicyEngineHost `
|
|
-PolicyEnginePort $PolicyEnginePort `
|
|
-PolicyEngineScheme $PolicyEngineScheme `
|
|
-PolicyRefreshSeconds $PolicyRefreshSeconds `
|
|
-PolicyCachePath $PolicyCachePath `
|
|
-HayabusaAutoUploadEnabled $HayabusaAutoUploadEnabled `
|
|
-HayabusaAutoUploadIntervalHours $HayabusaAutoUploadIntervalHours `
|
|
-HayabusaAutoUploadHoursBack $HayabusaAutoUploadHoursBack `
|
|
-HayabusaAutoUploadMode $HayabusaAutoUploadMode `
|
|
-HayabusaAutoUploadTaskName $HayabusaAutoUploadTaskName `
|
|
-File1CAutoUploadEnabled $File1CAutoUploadEnabled `
|
|
-File1CAutoUploadIntervalHours $File1CAutoUploadIntervalHours `
|
|
-File1CAutoUploadTaskName $File1CAutoUploadTaskName `
|
|
-File1CTargetHost $File1CTargetHost `
|
|
-File1CTargetUser $File1CTargetUser `
|
|
-File1CRegistryWorkbookPath $File1CRegistryWorkbookPath `
|
|
-IntegrationTestEnabled:$IntegrationTestEnabled
|
|
|
|
if (-not $SkipHardening) {
|
|
& $hardeningScript `
|
|
-ConfigPath (Join-Path $StateRoot 'deployment-config.json') `
|
|
-ServerHost $ServerHost `
|
|
-ServerPort $ServerPort `
|
|
-ServerScheme $ServerScheme `
|
|
-Users $resolvedUsers `
|
|
-InstallRoot $InstallRoot `
|
|
-StateRoot $StateRoot `
|
|
-PollSeconds $PollSeconds `
|
|
-PulseSeconds $PulseSeconds `
|
|
-RecoveryIntervalSeconds $RecoveryIntervalSeconds `
|
|
-AfkEnabled $AfkEnabled `
|
|
-WindowEnabled $WindowEnabled `
|
|
-FileOpsEnabled $FileOpsEnabled `
|
|
-LocalAgentLogsEnabled $LocalAgentLogsEnabled `
|
|
-IncidentCaptureEnabled $IncidentCaptureEnabled `
|
|
-IncidentScreenshotEnabled $IncidentScreenshotEnabled `
|
|
-IncidentArtifactsRoot $IncidentArtifactsRoot `
|
|
-EvtxExportRoot $EvtxExportRoot `
|
|
-EvtxRetentionDays $EvtxRetentionDays `
|
|
-EvtxChannels $EvtxChannels `
|
|
-LogonMarkerEnabled $LogonMarkerEnabled `
|
|
-ProcessEventsEnabled $ProcessEventsEnabled `
|
|
-AwHostname $AwHostname `
|
|
-CustomRulesPath $CustomRulesPath `
|
|
-CustomPolicyPath $CustomPolicyPath `
|
|
-PolicyMode $PolicyMode `
|
|
-PolicyEngineEnabled $PolicyEngineEnabled `
|
|
-PolicyEngineHost $PolicyEngineHost `
|
|
-PolicyEnginePort $PolicyEnginePort `
|
|
-PolicyEngineScheme $PolicyEngineScheme `
|
|
-PolicyRefreshSeconds $PolicyRefreshSeconds `
|
|
-PolicyCachePath $PolicyCachePath
|
|
}
|
|
|
|
$report = [ordered]@{
|
|
generatedAtUtc = (Get-Date).ToUniversalTime().ToString('o')
|
|
server = [ordered]@{
|
|
host = $ServerHost
|
|
port = $ServerPort
|
|
scheme = $ServerScheme
|
|
}
|
|
packageVersion = $Version
|
|
users = @($resolvedUsers)
|
|
paths = [ordered]@{
|
|
installRoot = $InstallRoot
|
|
stateRoot = $StateRoot
|
|
configPath = Join-Path $StateRoot 'deployment-config.json'
|
|
}
|
|
collectors = [ordered]@{
|
|
afkEnabled = $AfkEnabled
|
|
windowEnabled = $WindowEnabled
|
|
fileOpsEnabled = $FileOpsEnabled
|
|
worktimeSessionEnabled = $true
|
|
worktimeSessionMode = 'powershell_primary'
|
|
worktimeLegacyFallbackEnabled = $true
|
|
}
|
|
hardeningApplied = (-not $SkipHardening)
|
|
}
|
|
|
|
if ($ValidateAfterDeploy) {
|
|
if (-not (Test-Path -LiteralPath $validationScript)) {
|
|
throw "Не найден скрипт: $validationScript"
|
|
}
|
|
|
|
$validation = & $validationScript -ConfigPath (Join-Path $StateRoot 'deployment-config.json')
|
|
$report.validation = $validation
|
|
}
|
|
|
|
$reportDirectory = Split-Path -Path $effectiveReportPath -Parent
|
|
if ($reportDirectory) {
|
|
New-ActivityWatchDirectory -Path $reportDirectory
|
|
}
|
|
|
|
$report | ConvertTo-Json -Depth 12 | Set-Content -LiteralPath $effectiveReportPath -Encoding UTF8
|
|
|
|
Write-Host 'Комплексное развёртывание ActivityWatch завершено.'
|
|
Write-Host "Пользователи: $($resolvedUsers -join ', ')"
|
|
Write-Host "Отчёт: $effectiveReportPath"
|