Согласовать Windows пути с InnoSetup

This commit is contained in:
Devin AI
2026-05-02 09:20:28 +00:00
parent 342ab77f44
commit 21f0184115
28 changed files with 117 additions and 109 deletions
+5 -1
View File
@@ -92,7 +92,7 @@ ansible-playbook -i inventory.ini deploy_aw_windows_phase2.yml
Playbook: Playbook:
- выгружает полный `windows/*` toolkit на целевой хост в `C:\Deploy\AWatch-rus\windows`, включая DLP и `worktime-session-collector.ps1`; - выгружает полный `windows/*` toolkit на целевой хост в InnoSetup-compatible каталог `C:\Program Files\AWatch-rus\windows`, включая DLP и `worktime-session-collector.ps1`;
- выполняет `deploy-ensemble.ps1` (deploy + hardening/recovery) с phase-2 policy/rules; - выполняет `deploy-ensemble.ps1` (deploy + hardening/recovery) с phase-2 policy/rules;
- после deploy принудительно запускает `ActivityWatch Recovery` и все `ActivityWatch Launch *` задачи; - после deploy принудительно запускает `ActivityWatch Recovery` и все `ActivityWatch Launch *` задачи;
- выполняет API smoke-check bucket `aw-watcher-afk_<COMPUTERNAME>` и ожидает свежие `not-afk` события; - выполняет API smoke-check bucket `aw-watcher-afk_<COMPUTERNAME>` и ожидает свежие `not-afk` события;
@@ -106,6 +106,10 @@ Playbook:
- `aw_windows_incident_capture_enabled: false` — отключить блок incidentCapture; - `aw_windows_incident_capture_enabled: false` — отключить блок incidentCapture;
- `aw_windows_incident_screenshot_enabled: false` — не делать скриншот при DLP-инциденте; - `aw_windows_incident_screenshot_enabled: false` — не делать скриншот при DLP-инциденте;
- `aw_windows_incident_artifacts_root: 'C:\...\incident-artifacts'` — переопределить путь артефактов; - `aw_windows_incident_artifacts_root: 'C:\...\incident-artifacts'` — переопределить путь артефактов;
- `aw_windows_deploy_root: 'C:\Program Files\AWatch-rus'` — каталог toolkit, совпадает с InnoSetup `{app}`;
- `aw_windows_install_root: 'C:\Program Files\ActivityWatch-Phase2'` — каталог бинарников, совпадает с InnoSetup `AwDefaultInstallRoot`;
- `aw_windows_state_root: 'C:\ProgramData\ActivityWatch-Phase2'` — каталог состояния/отчётов, совпадает с InnoSetup `AwDefaultStateRoot`;
- `aw_windows_validation_remote_path: '{{ aw_windows_state_root }}\aw_validate_phase2_ansible.json'` — отчёт Ansible-валидации хранится рядом с `ensemble-report-*.json`;
- `aw_windows_package_version`, `aw_windows_package_url`, `aw_windows_package_zip_path` — версия и источник Windows-пакета ActivityWatch; - `aw_windows_package_version`, `aw_windows_package_url`, `aw_windows_package_zip_path` — версия и источник Windows-пакета ActivityWatch;
- `aw_windows_api_smoke_check_bucket: ""` — автоматически использовать `aw-watcher-afk_<COMPUTERNAME>`; - `aw_windows_api_smoke_check_bucket: ""` — автоматически использовать `aw-watcher-afk_<COMPUTERNAME>`;
- `aw_windows_fail_on_validation_error: true` — завершать playbook ошибкой, если `validate-deployment.ps1` возвращает `overallOk=false`; - `aw_windows_fail_on_validation_error: true` — завершать playbook ошибкой, если `validate-deployment.ps1` возвращает `overallOk=false`;
+3 -3
View File
@@ -5,7 +5,7 @@
vars: vars:
aw_windows_repo_root: "{{ playbook_dir | dirname }}" aw_windows_repo_root: "{{ playbook_dir | dirname }}"
aw_windows_deploy_root: "C:\\Deploy\\AWatch-rus" aw_windows_deploy_root: "C:\\Program Files\\AWatch-rus"
aw_windows_server_scheme: "http" aw_windows_server_scheme: "http"
aw_windows_server_host: "10.10.10.13" aw_windows_server_host: "10.10.10.13"
aw_windows_server_port: 5600 aw_windows_server_port: 5600
@@ -22,7 +22,7 @@
aw_windows_extra_users: [] aw_windows_extra_users: []
aw_windows_users_effective: "{{ (aw_windows_users + aw_windows_extra_users) | unique }}" aw_windows_users_effective: "{{ (aw_windows_users + aw_windows_extra_users) | unique }}"
aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2" aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2"
aw_windows_state_root: "C:\\ProgramData\\ActivityWatch" aw_windows_state_root: "C:\\ProgramData\\ActivityWatch-Phase2"
aw_windows_afk_enabled: true aw_windows_afk_enabled: true
aw_windows_window_enabled: true aw_windows_window_enabled: true
aw_windows_local_agent_logs_enabled: false aw_windows_local_agent_logs_enabled: false
@@ -33,7 +33,7 @@
aw_windows_skip_hardening: false aw_windows_skip_hardening: false
aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json"
aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json"
aw_windows_validation_remote_path: "C:\\Windows\\Temp\\aw_validate_phase2_ansible.json" aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_phase2_ansible.json"
aw_windows_validation_local_dir: "/tmp/aw-rus-validation" aw_windows_validation_local_dir: "/tmp/aw-rus-validation"
aw_windows_launch_task_pattern: "ActivityWatch Launch *" aw_windows_launch_task_pattern: "ActivityWatch Launch *"
aw_windows_recovery_task_name: "ActivityWatch Recovery" aw_windows_recovery_task_name: "ActivityWatch Recovery"
+3 -3
View File
@@ -1,5 +1,5 @@
aw_windows_repo_root: "{{ playbook_dir | dirname }}" aw_windows_repo_root: "{{ playbook_dir | dirname }}"
aw_windows_deploy_root: "C:\\Deploy\\AWatch-rus" aw_windows_deploy_root: "C:\\Program Files\\AWatch-rus"
aw_windows_server_scheme: "http" aw_windows_server_scheme: "http"
aw_windows_server_host: "10.10.10.13" aw_windows_server_host: "10.10.10.13"
aw_windows_server_port: 5600 aw_windows_server_port: 5600
@@ -20,7 +20,7 @@ aw_windows_extra_users: []
# Рекомендуемый изолированный профиль для фазового раската. # Рекомендуемый изолированный профиль для фазового раската.
aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2" aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2"
aw_windows_state_root: "C:\\ProgramData\\ActivityWatch" aw_windows_state_root: "C:\\ProgramData\\ActivityWatch-Phase2"
aw_windows_afk_enabled: true aw_windows_afk_enabled: true
aw_windows_window_enabled: true aw_windows_window_enabled: true
aw_windows_local_agent_logs_enabled: false aw_windows_local_agent_logs_enabled: false
@@ -33,7 +33,7 @@ aw_windows_skip_hardening: false
aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json"
aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json"
aw_windows_validation_remote_path: "C:\\Windows\\Temp\\aw_validate_phase2_ansible.json" aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_phase2_ansible.json"
aw_windows_validation_local_dir: "/tmp/aw-rus-validation" aw_windows_validation_local_dir: "/tmp/aw-rus-validation"
aw_windows_fail_on_validation_error: true aw_windows_fail_on_validation_error: true
+18 -18
View File
@@ -177,7 +177,7 @@ grep -n 'aw-ru-patch\|aw-sw-cleanup' /opt/activitywatch/webui-ru/index.html
например в: например в:
- `C:\Deploy\ActivityWatch-Russian\windows` - `C:\Program Files\AWatch-rus\windows`
Откройте **elevated PowerShell**: Откройте **elevated PowerShell**:
@@ -190,12 +190,12 @@ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
Пример со списком пользователей: Пример со списком пользователей:
```powershell ```powershell
C:\Deploy\ActivityWatch-Russian\windows\deploy-domain-users.ps1 ` C:\Program Files\AWatch-rus\windows\deploy-domain-users.ps1 `
-ServerHost aw.example.local ` -ServerHost aw.example.local `
-ServerPort 5600 ` -ServerPort 5600 `
-Domain CONTOSO ` -Domain CONTOSO `
-UserListPath C:\Deploy\aw-users.txt ` -UserListPath C:\Deploy\aw-users.txt `
-CustomRulesPath C:\Deploy\ActivityWatch-Russian\windows\web-category-rules.example.json -CustomRulesPath C:\Program Files\AWatch-rus\windows\web-category-rules.example.json
``` ```
Поддерживаемые варианты: Поддерживаемые варианты:
@@ -207,7 +207,7 @@ C:\Deploy\ActivityWatch-Russian\windows\deploy-domain-users.ps1 `
### 3.2.1 Ensemble orchestration (рекомендуется для production) ### 3.2.1 Ensemble orchestration (рекомендуется для production)
```powershell ```powershell
C:\Deploy\ActivityWatch-Russian\windows\deploy-ensemble.ps1 ` C:\Program Files\AWatch-rus\windows\deploy-ensemble.ps1 `
-ServerHost aw.example.local ` -ServerHost aw.example.local `
-ServerPort 5600 ` -ServerPort 5600 `
-Domain CONTOSO ` -Domain CONTOSO `
@@ -217,30 +217,30 @@ C:\Deploy\ActivityWatch-Russian\windows\deploy-ensemble.ps1 `
Отчёт сохраняется в: Отчёт сохраняется в:
- `C:\ProgramData\ActivityWatch\ensemble-report-YYYYMMDD-HHMMSS.json` - `C:\ProgramData\ActivityWatch-Phase2\ensemble-report-YYYYMMDD-HHMMSS.json`
### 3.3 Single-user развёртывание ### 3.3 Single-user развёртывание
```powershell ```powershell
C:\Deploy\ActivityWatch-Russian\windows\deploy-single-user.ps1 ` C:\Program Files\AWatch-rus\windows\deploy-single-user.ps1 `
-ServerHost aw.example.local ` -ServerHost aw.example.local `
-ServerPort 5600 ` -ServerPort 5600 `
-TargetUser 'CONTOSO\user01' ` -TargetUser 'CONTOSO\user01' `
-CustomRulesPath C:\Deploy\ActivityWatch-Russian\windows\web-category-rules.example.json -CustomRulesPath C:\Program Files\AWatch-rus\windows\web-category-rules.example.json
``` ```
### 3.4 Recovery / hardening ### 3.4 Recovery / hardening
```powershell ```powershell
C:\Deploy\ActivityWatch-Russian\windows\hardening-recovery.ps1 ` C:\Program Files\AWatch-rus\windows\hardening-recovery.ps1 `
-ConfigPath C:\ProgramData\ActivityWatch\deployment-config.json -ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json
``` ```
### 3.5 Валидация deployment-а (PowerShell report) ### 3.5 Валидация deployment-а (PowerShell report)
```powershell ```powershell
$report = C:\Deploy\ActivityWatch-Russian\windows\validate-deployment.ps1 ` $report = C:\Program Files\AWatch-rus\windows\validate-deployment.ps1 `
-ConfigPath C:\ProgramData\ActivityWatch\deployment-config.json -ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json
$report | ConvertTo-Json -Depth 12 $report | ConvertTo-Json -Depth 12
``` ```
@@ -248,13 +248,13 @@ $report | ConvertTo-Json -Depth 12
## 4) Что должно появиться на Windows после установки ## 4) Что должно появиться на Windows после установки
- `C:\Program Files\ActivityWatch` - `C:\Program Files\ActivityWatch-Phase2`
- `C:\ProgramData\ActivityWatch\deployment-config.json` - `C:\ProgramData\ActivityWatch-Phase2\deployment-config.json`
- `C:\ProgramData\ActivityWatch\launch-watchers.ps1` - `C:\ProgramData\ActivityWatch-Phase2\launch-watchers.ps1`
- `C:\ProgramData\ActivityWatch\recovery-loop.ps1` - `C:\ProgramData\ActivityWatch-Phase2\recovery-loop.ps1`
- `C:\ProgramData\ActivityWatch\browser-domains-native-collector.ps1` - `C:\ProgramData\ActivityWatch-Phase2\browser-domains-native-collector.ps1`
- `C:\ProgramData\ActivityWatch\web-category-rules.json` - `C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json`
- `C:\ProgramData\ActivityWatch\logs\` - `C:\ProgramData\ActivityWatch-Phase2\logs\`
Задачи планировщика: Задачи планировщика:
+19 -19
View File
@@ -15,14 +15,14 @@
## Что делает пакет ## Что делает пакет
- Ставит `aw-watcher-afk` и `aw-watcher-window` из официального Windows ZIP ActivityWatch. - Ставит `aw-watcher-afk` и `aw-watcher-window` из официального Windows ZIP ActivityWatch.
- Копирует browser-domain collector в `C:\ProgramData\ActivityWatch`. - Копирует browser-domain collector в `C:\ProgramData\ActivityWatch-Phase2`.
- Копирует DLP policy в `C:\ProgramData\ActivityWatch\dlp-policy.json`. - Копирует DLP policy в `C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json`.
- Включает `incidentCapture` в `deployment-config.json` для DLP-инцидентов: - Включает `incidentCapture` в `deployment-config.json` для DLP-инцидентов:
- `incidentCapture.screenshotEnabled = true` - `incidentCapture.screenshotEnabled = true`
- `incidentCapture.artifactsRoot = <StateRoot>\incident-artifacts` - `incidentCapture.artifactsRoot = <StateRoot>\incident-artifacts`
- Создаёт per-user задачи `ActivityWatch Launch [...]` с запуском при логоне. - Создаёт per-user задачи `ActivityWatch Launch [...]` с запуском при логоне.
- Создаёт системную задачу `ActivityWatch Recovery`, которая циклически перезапускает per-user launch tasks. - Создаёт системную задачу `ActivityWatch Recovery`, которая циклически перезапускает per-user launch tasks.
- Применяет ACL к `C:\Program Files\ActivityWatch`, `C:\ProgramData\ActivityWatch` и каталогу логов. - Применяет ACL к `C:\Program Files\ActivityWatch-Phase2`, `C:\ProgramData\ActivityWatch-Phase2` и каталогу логов.
- Не содержит хардкодов инфраструктуры: сервер, домен, список пользователей и правила передаются параметрами. - Не содержит хардкодов инфраструктуры: сервер, домен, список пользователей и правила передаются параметрами.
- Корректно регистрирует задачи через `-LogonType Interactive` (совместимо с Windows Server, где `InteractiveToken` не поддерживается). - Корректно регистрирует задачи через `-LogonType Interactive` (совместимо с Windows Server, где `InteractiveToken` не поддерживается).
- Поддерживает отключение шумных watcher'ов через `-AfkEnabled:$false` и `-WindowEnabled:$false`. - Поддерживает отключение шумных watcher'ов через `-AfkEnabled:$false` и `-WindowEnabled:$false`.
@@ -155,8 +155,8 @@ CSV-формат: колонка `User`, `Username`, `SamAccountName` или `Lo
-Users user2,user3,user4,user5 ` -Users user2,user3,user4,user5 `
-InstallRoot 'C:\Program Files\ActivityWatch-Phase2-u2u5' ` -InstallRoot 'C:\Program Files\ActivityWatch-Phase2-u2u5' `
-StateRoot 'C:\ProgramData\ActivityWatch-Phase2-u2u5' ` -StateRoot 'C:\ProgramData\ActivityWatch-Phase2-u2u5' `
-CustomRulesPath C:\Deploy\AWatch-rus\windows\web-category-rules.example.json ` -CustomRulesPath C:\Program Files\AWatch-rus\windows\web-category-rules.example.json `
-CustomPolicyPath C:\Deploy\AWatch-rus\windows\dlp-policy.example.json -CustomPolicyPath C:\Program Files\AWatch-rus\windows\dlp-policy.example.json
``` ```
Single-user pilot в таком же стиле: Single-user pilot в таком же стиле:
@@ -168,8 +168,8 @@ Single-user pilot в таком же стиле:
-TargetUser 'SHARKON2025\user1' ` -TargetUser 'SHARKON2025\user1' `
-InstallRoot 'C:\Program Files\ActivityWatch-Phase2' ` -InstallRoot 'C:\Program Files\ActivityWatch-Phase2' `
-StateRoot 'C:\ProgramData\ActivityWatch-Phase2-user1' ` -StateRoot 'C:\ProgramData\ActivityWatch-Phase2-user1' `
-CustomRulesPath C:\Deploy\AWatch-rus\windows\web-category-rules.example.json ` -CustomRulesPath C:\Program Files\AWatch-rus\windows\web-category-rules.example.json `
-CustomPolicyPath C:\Deploy\AWatch-rus\windows\dlp-policy.example.json -CustomPolicyPath C:\Program Files\AWatch-rus\windows\dlp-policy.example.json
``` ```
## Ensemble deploy (production workflow) ## Ensemble deploy (production workflow)
@@ -186,31 +186,31 @@ Single-user pilot в таком же стиле:
Итоговый отчёт: Итоговый отчёт:
- `C:\ProgramData\ActivityWatch\ensemble-report-YYYYMMDD-HHMMSS.json` - `C:\ProgramData\ActivityWatch-Phase2\ensemble-report-YYYYMMDD-HHMMSS.json`
## Категоризация доменов ## Категоризация доменов
- Встроенные категории покрывают базовые рабочие, нейтральные и личные домены. - Встроенные категории покрывают базовые рабочие, нейтральные и личные домены.
- Для кастомизации скопируйте `windows/web-category-rules.example.json` и отредактируйте домены. - Для кастомизации скопируйте `windows/web-category-rules.example.json` и отредактируйте домены.
- Передайте файл через `-CustomRulesPath`; он будет сохранён как `C:\ProgramData\ActivityWatch\web-category-rules.json`. - Передайте файл через `-CustomRulesPath`; он будет сохранён как `C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json`.
- Пользовательские правила имеют приоритет над встроенными. - Пользовательские правила имеют приоритет над встроенными.
## Структура после установки ## Структура после установки
- `C:\Program Files\ActivityWatch` — бинарники watcher'ов. - `C:\Program Files\ActivityWatch-Phase2` — бинарники watcher'ов.
- `C:\ProgramData\ActivityWatch\deployment-config.json` — итоговая конфигурация. - `C:\ProgramData\ActivityWatch-Phase2\deployment-config.json` — итоговая конфигурация.
- `C:\ProgramData\ActivityWatch\incident-artifacts\` — скриншоты DLP-инцидентов (если `incidentCapture.screenshotEnabled=true`). - `C:\ProgramData\ActivityWatch-Phase2\incident-artifacts\` — скриншоты DLP-инцидентов (если `incidentCapture.screenshotEnabled=true`).
- `C:\ProgramData\ActivityWatch\launch-watchers.ps1` — per-user launcher. - `C:\ProgramData\ActivityWatch-Phase2\launch-watchers.ps1` — per-user launcher.
- `C:\ProgramData\ActivityWatch\recovery-loop.ps1` — system recovery loop. - `C:\ProgramData\ActivityWatch-Phase2\recovery-loop.ps1` — system recovery loop.
- `C:\ProgramData\ActivityWatch\browser-domains-native-collector.ps1` — runtime collector. - `C:\ProgramData\ActivityWatch-Phase2\browser-domains-native-collector.ps1` — runtime collector.
- `C:\ProgramData\ActivityWatch\dlp-endpoint-signals-collector.ps1` — runtime endpoint collector. - `C:\ProgramData\ActivityWatch-Phase2\dlp-endpoint-signals-collector.ps1` — runtime endpoint collector.
- `C:\ProgramData\ActivityWatch\dlp-policy.json` — активная DLP-политика. - `C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json` — активная DLP-политика.
- `C:\ProgramData\ActivityWatch\logs\` — логи collector'а. - `C:\ProgramData\ActivityWatch-Phase2\logs\` — логи collector'а.
Для phased rollout те же файлы формируются в каталоге `StateRoot`, переданном параметром. Для phased rollout те же файлы формируются в каталоге `StateRoot`, переданном параметром.
## Повторный прогон ## Повторный прогон
- Скрипты идемпотентны: переустанавливают задачи и обновляют runtime-файлы. - Скрипты идемпотентны: переустанавливают задачи и обновляют runtime-файлы.
- Предыдущая установка ActivityWatch бэкапится в `C:\ProgramData\ActivityWatch\backups\install-YYYYMMDD-HHMMSS`. - Предыдущая установка ActivityWatch бэкапится в `C:\ProgramData\ActivityWatch-Phase2\backups\install-YYYYMMDD-HHMMSS`.
- Для жёсткого восстановления запускайте `windows/hardening-recovery.ps1`. - Для жёсткого восстановления запускайте `windows/hardening-recovery.ps1`.
+3 -3
View File
@@ -17,7 +17,7 @@
```powershell ```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
C:\Deploy\AWatch-rus\windows\deploy-ensemble.ps1 ` C:\Program Files\AWatch-rus\windows\deploy-ensemble.ps1 `
-ServerHost 10.10.10.13 ` -ServerHost 10.10.10.13 `
-ServerPort 5600 ` -ServerPort 5600 `
-Domain SHARKON2025 ` -Domain SHARKON2025 `
@@ -25,7 +25,7 @@ C:\Deploy\AWatch-rus\windows\deploy-ensemble.ps1 `
-InstallRoot 'C:\Program Files\ActivityWatch-Phase2' ` -InstallRoot 'C:\Program Files\ActivityWatch-Phase2' `
-StateRoot 'C:\ProgramData\ActivityWatch-Phase2' ` -StateRoot 'C:\ProgramData\ActivityWatch-Phase2' `
-AfkEnabled:$false ` -AfkEnabled:$false `
-CustomPolicyPath C:\Deploy\AWatch-rus\windows\dlp-policy.example.json ` -CustomPolicyPath C:\Program Files\AWatch-rus\windows\dlp-policy.example.json `
-ValidateAfterDeploy -ValidateAfterDeploy
``` ```
@@ -42,7 +42,7 @@ C:\Deploy\AWatch-rus\windows\deploy-ensemble.ps1 `
## Быстрый health-check ## Быстрый health-check
```powershell ```powershell
$report = C:\Deploy\AWatch-rus\windows\validate-deployment.ps1 ` $report = C:\Program Files\AWatch-rus\windows\validate-deployment.ps1 `
-ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json -ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json
$report | ConvertTo-Json -Depth 12 $report | ConvertTo-Json -Depth 12
``` ```
+3 -3
View File
@@ -23,7 +23,7 @@ Start-ScheduledTask -TaskName 'ActivityWatch Launch [CONTOSO_user01]'
- Скрипт работает через UI Automation и foreground window. - Скрипт работает через UI Automation и foreground window.
- Некоторые браузеры/страницы могут скрывать адресную строку или блокировать UIA. - Некоторые браузеры/страницы могут скрывать адресную строку или блокировать UIA.
- Проверьте лог `C:\ProgramData\ActivityWatch\logs\browser-domains-<user>.log`. - Проверьте лог `C:\ProgramData\ActivityWatch-Phase2\logs\browser-domains-<user>.log`.
- Убедитесь, что активное окно — поддерживаемый браузер: Edge, Chrome, Brave, Vivaldi, Opera, Firefox. - Убедитесь, что активное окно — поддерживаемый браузер: Edge, Chrome, Brave, Vivaldi, Opera, Firefox.
### Сервер недоступен ### Сервер недоступен
@@ -44,7 +44,7 @@ Invoke-WebRequest http://aw.example.local:5600/api/0/info
### Неправильная категоризация домена ### Неправильная категоризация домена
- Проверьте содержимое `C:\ProgramData\ActivityWatch\web-category-rules.json`. - Проверьте содержимое `C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json`.
- Пользовательские правила должны быть валидным JSON. - Пользовательские правила должны быть валидным JSON.
- Один и тот же домен лучше определять только в одной категории. - Один и тот же домен лучше определять только в одной категории.
- После изменения правил достаточно перезапустить collector или задачу пользователя: - После изменения правил достаточно перезапустить collector или задачу пользователя:
@@ -112,7 +112,7 @@ Get-CimInstance Win32_Process |
Проверить конфиг: Проверить конфиг:
```powershell ```powershell
Get-Content C:\ProgramData\ActivityWatch\deployment-config.json -Raw Get-Content C:\ProgramData\ActivityWatch-Phase2\deployment-config.json -Raw
``` ```
## Когда запускать hardening/recovery ## Когда запускать hardening/recovery
+12 -12
View File
@@ -4,7 +4,7 @@
```powershell ```powershell
$report = .\windows\validate-deployment.ps1 ` $report = .\windows\validate-deployment.ps1 `
-ConfigPath C:\ProgramData\ActivityWatch\deployment-config.json -ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json
$report | ConvertTo-Json -Depth 12 $report | ConvertTo-Json -Depth 12
``` ```
@@ -19,11 +19,11 @@ $report | ConvertTo-Json -Depth 12
### 1. Проверить установленные файлы ### 1. Проверить установленные файлы
```powershell ```powershell
Test-Path 'C:\Program Files\ActivityWatch\aw-watcher-afk\aw-watcher-afk.exe' Test-Path 'C:\Program Files\ActivityWatch-Phase2\aw-watcher-afk\aw-watcher-afk.exe'
Test-Path 'C:\Program Files\ActivityWatch\aw-watcher-window\aw-watcher-window.exe' Test-Path 'C:\Program Files\ActivityWatch-Phase2\aw-watcher-window\aw-watcher-window.exe'
Test-Path 'C:\ProgramData\ActivityWatch\browser-domains-native-collector.ps1' Test-Path 'C:\ProgramData\ActivityWatch-Phase2\browser-domains-native-collector.ps1'
Test-Path 'C:\ProgramData\ActivityWatch\dlp-policy.json' Test-Path 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json'
Test-Path 'C:\ProgramData\ActivityWatch\deployment-config.json' Test-Path 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json'
``` ```
Ожидаемый результат — везде `True`. Ожидаемый результат — везде `True`.
@@ -50,7 +50,7 @@ Get-ScheduledTask | Where-Object TaskName -eq 'ActivityWatch Recovery'
### 2.1 Проверить incidentCapture в конфиге ### 2.1 Проверить incidentCapture в конфиге
```powershell ```powershell
$cfg = Get-Content 'C:\ProgramData\ActivityWatch\deployment-config.json' -Raw | ConvertFrom-Json $cfg = Get-Content 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json' -Raw | ConvertFrom-Json
$cfg.incidentCapture $cfg.incidentCapture
``` ```
@@ -119,7 +119,7 @@ Invoke-WebRequest http://aw.example.local:5600/api/0/buckets | Select-Object -Ex
4. Проверьте локальный лог: 4. Проверьте локальный лог:
```powershell ```powershell
Get-Content "C:\ProgramData\ActivityWatch\logs\dlp-incidents-$env:USERNAME.log" -Tail 50 Get-Content "C:\ProgramData\ActivityWatch-Phase2\logs\dlp-incidents-$env:USERNAME.log" -Tail 50
``` ```
Если `screenshotEnabled = True`, проверьте наличие скриншота в инциденте: Если `screenshotEnabled = True`, проверьте наличие скриншота в инциденте:
@@ -188,7 +188,7 @@ Invoke-WebRequest http://aw.example.local:5600/api/0/buckets/aw-dlp-endpoint-sig
4. Проверьте локальный лог: 4. Проверьте локальный лог:
```powershell ```powershell
Get-Content "C:\ProgramData\ActivityWatch\logs\endpoint-signals-$env:USERNAME.log" -Tail 50 Get-Content "C:\ProgramData\ActivityWatch-Phase2\logs\endpoint-signals-$env:USERNAME.log" -Tail 50
``` ```
## Проверка восстановления ## Проверка восстановления
@@ -206,9 +206,9 @@ Start-ScheduledTask -TaskName 'ActivityWatch Recovery'
## Проверка ACL ## Проверка ACL
```powershell ```powershell
icacls 'C:\Program Files\ActivityWatch' icacls 'C:\Program Files\ActivityWatch-Phase2'
icacls 'C:\ProgramData\ActivityWatch' icacls 'C:\ProgramData\ActivityWatch-Phase2'
icacls 'C:\ProgramData\ActivityWatch\logs' icacls 'C:\ProgramData\ActivityWatch-Phase2\logs'
``` ```
Ожидаемо: Ожидаемо:
@@ -92,7 +92,7 @@ ansible-playbook -i inventory.ini deploy_aw_windows_phase2.yml
Playbook: Playbook:
- выгружает полный `windows/*` toolkit на целевой хост в `C:\Deploy\AWatch-rus\windows`, включая DLP и `worktime-session-collector.ps1`; - выгружает полный `windows/*` toolkit на целевой хост в InnoSetup-compatible каталог `C:\Program Files\AWatch-rus\windows`, включая DLP и `worktime-session-collector.ps1`;
- выполняет `deploy-ensemble.ps1` (deploy + hardening/recovery) с phase-2 policy/rules; - выполняет `deploy-ensemble.ps1` (deploy + hardening/recovery) с phase-2 policy/rules;
- после deploy принудительно запускает `ActivityWatch Recovery` и все `ActivityWatch Launch *` задачи; - после deploy принудительно запускает `ActivityWatch Recovery` и все `ActivityWatch Launch *` задачи;
- выполняет API smoke-check bucket `aw-watcher-afk_<COMPUTERNAME>` и ожидает свежие `not-afk` события; - выполняет API smoke-check bucket `aw-watcher-afk_<COMPUTERNAME>` и ожидает свежие `not-afk` события;
@@ -106,6 +106,10 @@ Playbook:
- `aw_windows_incident_capture_enabled: false` — отключить блок incidentCapture; - `aw_windows_incident_capture_enabled: false` — отключить блок incidentCapture;
- `aw_windows_incident_screenshot_enabled: false` — не делать скриншот при DLP-инциденте; - `aw_windows_incident_screenshot_enabled: false` — не делать скриншот при DLP-инциденте;
- `aw_windows_incident_artifacts_root: 'C:\...\incident-artifacts'` — переопределить путь артефактов; - `aw_windows_incident_artifacts_root: 'C:\...\incident-artifacts'` — переопределить путь артефактов;
- `aw_windows_deploy_root: 'C:\Program Files\AWatch-rus'` — каталог toolkit, совпадает с InnoSetup `{app}`;
- `aw_windows_install_root: 'C:\Program Files\ActivityWatch-Phase2'` — каталог бинарников, совпадает с InnoSetup `AwDefaultInstallRoot`;
- `aw_windows_state_root: 'C:\ProgramData\ActivityWatch-Phase2'` — каталог состояния/отчётов, совпадает с InnoSetup `AwDefaultStateRoot`;
- `aw_windows_validation_remote_path: '{{ aw_windows_state_root }}\aw_validate_phase2_ansible.json'` — отчёт Ansible-валидации хранится рядом с `ensemble-report-*.json`;
- `aw_windows_package_version`, `aw_windows_package_url`, `aw_windows_package_zip_path` — версия и источник Windows-пакета ActivityWatch; - `aw_windows_package_version`, `aw_windows_package_url`, `aw_windows_package_zip_path` — версия и источник Windows-пакета ActivityWatch;
- `aw_windows_api_smoke_check_bucket: ""` — автоматически использовать `aw-watcher-afk_<COMPUTERNAME>`; - `aw_windows_api_smoke_check_bucket: ""` — автоматически использовать `aw-watcher-afk_<COMPUTERNAME>`;
- `aw_windows_fail_on_validation_error: true` — завершать playbook ошибкой, если `validate-deployment.ps1` возвращает `overallOk=false`; - `aw_windows_fail_on_validation_error: true` — завершать playbook ошибкой, если `validate-deployment.ps1` возвращает `overallOk=false`;
@@ -5,7 +5,7 @@
vars: vars:
aw_windows_repo_root: "{{ playbook_dir | dirname }}" aw_windows_repo_root: "{{ playbook_dir | dirname }}"
aw_windows_deploy_root: "C:\\Deploy\\AWatch-rus" aw_windows_deploy_root: "C:\\Program Files\\AWatch-rus"
aw_windows_server_scheme: "http" aw_windows_server_scheme: "http"
aw_windows_server_host: "10.10.10.13" aw_windows_server_host: "10.10.10.13"
aw_windows_server_port: 5600 aw_windows_server_port: 5600
@@ -22,7 +22,7 @@
aw_windows_extra_users: [] aw_windows_extra_users: []
aw_windows_users_effective: "{{ (aw_windows_users + aw_windows_extra_users) | unique }}" aw_windows_users_effective: "{{ (aw_windows_users + aw_windows_extra_users) | unique }}"
aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2" aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2"
aw_windows_state_root: "C:\\ProgramData\\ActivityWatch" aw_windows_state_root: "C:\\ProgramData\\ActivityWatch-Phase2"
aw_windows_afk_enabled: true aw_windows_afk_enabled: true
aw_windows_window_enabled: true aw_windows_window_enabled: true
aw_windows_local_agent_logs_enabled: false aw_windows_local_agent_logs_enabled: false
@@ -33,7 +33,7 @@
aw_windows_skip_hardening: false aw_windows_skip_hardening: false
aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json"
aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json"
aw_windows_validation_remote_path: "C:\\Windows\\Temp\\aw_validate_phase2_ansible.json" aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_phase2_ansible.json"
aw_windows_validation_local_dir: "/tmp/aw-rus-validation" aw_windows_validation_local_dir: "/tmp/aw-rus-validation"
aw_windows_launch_task_pattern: "ActivityWatch Launch *" aw_windows_launch_task_pattern: "ActivityWatch Launch *"
aw_windows_recovery_task_name: "ActivityWatch Recovery" aw_windows_recovery_task_name: "ActivityWatch Recovery"
@@ -1,5 +1,5 @@
aw_windows_repo_root: "{{ playbook_dir | dirname }}" aw_windows_repo_root: "{{ playbook_dir | dirname }}"
aw_windows_deploy_root: "C:\\Deploy\\AWatch-rus" aw_windows_deploy_root: "C:\\Program Files\\AWatch-rus"
aw_windows_server_scheme: "http" aw_windows_server_scheme: "http"
aw_windows_server_host: "10.10.10.13" aw_windows_server_host: "10.10.10.13"
aw_windows_server_port: 5600 aw_windows_server_port: 5600
@@ -20,7 +20,7 @@ aw_windows_extra_users: []
# Рекомендуемый изолированный профиль для фазового раската. # Рекомендуемый изолированный профиль для фазового раската.
aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2" aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2"
aw_windows_state_root: "C:\\ProgramData\\ActivityWatch" aw_windows_state_root: "C:\\ProgramData\\ActivityWatch-Phase2"
aw_windows_afk_enabled: true aw_windows_afk_enabled: true
aw_windows_window_enabled: true aw_windows_window_enabled: true
aw_windows_local_agent_logs_enabled: false aw_windows_local_agent_logs_enabled: false
@@ -33,7 +33,7 @@ aw_windows_skip_hardening: false
aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json"
aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json"
aw_windows_validation_remote_path: "C:\\Windows\\Temp\\aw_validate_phase2_ansible.json" aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_phase2_ansible.json"
aw_windows_validation_local_dir: "/tmp/aw-rus-validation" aw_windows_validation_local_dir: "/tmp/aw-rus-validation"
aw_windows_fail_on_validation_error: true aw_windows_fail_on_validation_error: true
@@ -1,6 +1,6 @@
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json', [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json',
[string]$ServerHost, [string]$ServerHost,
[int]$ServerPort, [int]$ServerPort,
[ValidateSet('http', 'https')] [ValidateSet('http', 'https')]
@@ -52,11 +52,11 @@ $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath
$resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' }
$resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 }
$resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' } $resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' }
$resolvedRulesPath = if ($RulesPath) { $RulesPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.rulesPath } else { 'C:\ProgramData\ActivityWatch\web-category-rules.json' } $resolvedRulesPath = if ($RulesPath) { $RulesPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.rulesPath } else { 'C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json' }
$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch\dlp-policy.json' } $resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' }
$resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 } $resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 }
$resolvedPulseSeconds = if ($PSBoundParameters.ContainsKey('PulseSeconds')) { $PulseSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pulseSeconds } else { 30 } $resolvedPulseSeconds = if ($PSBoundParameters.ContainsKey('PulseSeconds')) { $PulseSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pulseSeconds } else { 30 }
$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch\logs' } $resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch-Phase2\logs' }
$resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("browser-domains-{0}.log" -f $env:USERNAME) } $resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("browser-domains-{0}.log" -f $env:USERNAME) }
$resolvedIncidentLogPath = if ($IncidentLogPath) { $IncidentLogPath } else { Join-Path $resolvedLogsRoot ("dlp-incidents-{0}.log" -f $env:USERNAME) } $resolvedIncidentLogPath = if ($IncidentLogPath) { $IncidentLogPath } else { Join-Path $resolvedLogsRoot ("dlp-incidents-{0}.log" -f $env:USERNAME) }
$resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true } $resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true }
@@ -11,8 +11,8 @@ param(
[string]$Version = 'v0.13.2', [string]$Version = 'v0.13.2',
[string]$PackageUrl, [string]$PackageUrl,
[string]$PackageZipPath, [string]$PackageZipPath,
[string]$InstallRoot = 'C:\Program Files\ActivityWatch', [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2',
[string]$StateRoot = 'C:\ProgramData\ActivityWatch', [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2',
[int]$PollSeconds = 5, [int]$PollSeconds = 5,
[int]$PulseSeconds = 30, [int]$PulseSeconds = 30,
[int]$RecoveryIntervalSeconds = 180, [int]$RecoveryIntervalSeconds = 180,
@@ -11,8 +11,8 @@ param(
[string]$Version = 'v0.13.2', [string]$Version = 'v0.13.2',
[string]$PackageUrl, [string]$PackageUrl,
[string]$PackageZipPath, [string]$PackageZipPath,
[string]$InstallRoot = 'C:\Program Files\ActivityWatch', [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2',
[string]$StateRoot = 'C:\ProgramData\ActivityWatch', [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2',
[int]$PollSeconds = 5, [int]$PollSeconds = 5,
[int]$PulseSeconds = 30, [int]$PulseSeconds = 30,
[int]$RecoveryIntervalSeconds = 180, [int]$RecoveryIntervalSeconds = 180,
@@ -10,8 +10,8 @@ param(
[string]$Version = 'v0.13.2', [string]$Version = 'v0.13.2',
[string]$PackageUrl, [string]$PackageUrl,
[string]$PackageZipPath, [string]$PackageZipPath,
[string]$InstallRoot = 'C:\Program Files\ActivityWatch', [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2',
[string]$StateRoot = 'C:\ProgramData\ActivityWatch', [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2',
[int]$PollSeconds = 5, [int]$PollSeconds = 5,
[int]$PulseSeconds = 30, [int]$PulseSeconds = 30,
[int]$RecoveryIntervalSeconds = 180, [int]$RecoveryIntervalSeconds = 180,
@@ -1,6 +1,6 @@
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json', [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json',
[string]$ServerHost, [string]$ServerHost,
[int]$ServerPort, [int]$ServerPort,
[ValidateSet('http', 'https')] [ValidateSet('http', 'https')]
@@ -713,9 +713,9 @@ $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath
$resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' }
$resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 }
$resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' } $resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' }
$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig -and $deploymentConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch\dlp-policy.json' } $resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig -and $deploymentConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' }
$resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 } $resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 }
$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch\logs' } $resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch-Phase2\logs' }
$resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("endpoint-signals-{0}.log" -f $env:USERNAME) } $resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("endpoint-signals-{0}.log" -f $env:USERNAME) }
$resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true } $resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true }
$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'ActivityWatch-Phase2\\incident-artifacts' } $resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'ActivityWatch-Phase2\\incident-artifacts' }
@@ -1,6 +1,6 @@
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json', [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json',
[string]$ServerHost, [string]$ServerHost,
[int]$ServerPort, [int]$ServerPort,
[ValidateSet('http', 'https')] [ValidateSet('http', 'https')]
@@ -45,8 +45,8 @@ if (-not $existingConfig -and (-not $ServerHost)) {
throw 'deployment-config.json отсутствует. Укажите -ServerHost и параметры пользователей либо сначала выполните скрипт развёртывания.' throw 'deployment-config.json отсутствует. Укажите -ServerHost и параметры пользователей либо сначала выполните скрипт развёртывания.'
} }
$effectiveStateRoot = if ($StateRoot) { $StateRoot } elseif ($existingConfig) { [string]$existingConfig.paths.stateRoot } else { 'C:\ProgramData\ActivityWatch' } $effectiveStateRoot = if ($StateRoot) { $StateRoot } elseif ($existingConfig) { [string]$existingConfig.paths.stateRoot } else { 'C:\ProgramData\ActivityWatch-Phase2' }
$effectiveInstallRoot = if ($InstallRoot) { $InstallRoot } elseif ($existingConfig) { [string]$existingConfig.paths.installRoot } else { 'C:\Program Files\ActivityWatch' } $effectiveInstallRoot = if ($InstallRoot) { $InstallRoot } elseif ($existingConfig) { [string]$existingConfig.paths.installRoot } else { 'C:\Program Files\ActivityWatch-Phase2' }
$effectiveLogsRoot = if ($existingConfig) { [string]$existingConfig.paths.logsRoot } else { Join-Path $effectiveStateRoot 'logs' } $effectiveLogsRoot = if ($existingConfig) { [string]$existingConfig.paths.logsRoot } else { Join-Path $effectiveStateRoot 'logs' }
$effectiveConfigPath = if ($ConfigPath) { $ConfigPath } else { Join-Path $effectiveStateRoot 'deployment-config.json' } $effectiveConfigPath = if ($ConfigPath) { $ConfigPath } else { Join-Path $effectiveStateRoot 'deployment-config.json' }
$effectiveLaunchScript = Join-Path $effectiveStateRoot 'launch-watchers.ps1' $effectiveLaunchScript = Join-Path $effectiveStateRoot 'launch-watchers.ps1'
@@ -1,6 +1,6 @@
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json' [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json'
) )
Set-StrictMode -Version Latest Set-StrictMode -Version Latest
@@ -1,5 +1,5 @@
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json', [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json',
[string]$Hostname, [string]$Hostname,
[int]$PollSeconds = 30 [int]$PollSeconds = 30
) )
+4 -4
View File
@@ -1,6 +1,6 @@
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json', [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json',
[string]$ServerHost, [string]$ServerHost,
[int]$ServerPort, [int]$ServerPort,
[ValidateSet('http', 'https')] [ValidateSet('http', 'https')]
@@ -52,11 +52,11 @@ $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath
$resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' }
$resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 }
$resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' } $resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' }
$resolvedRulesPath = if ($RulesPath) { $RulesPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.rulesPath } else { 'C:\ProgramData\ActivityWatch\web-category-rules.json' } $resolvedRulesPath = if ($RulesPath) { $RulesPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.rulesPath } else { 'C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json' }
$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch\dlp-policy.json' } $resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' }
$resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 } $resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 }
$resolvedPulseSeconds = if ($PSBoundParameters.ContainsKey('PulseSeconds')) { $PulseSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pulseSeconds } else { 30 } $resolvedPulseSeconds = if ($PSBoundParameters.ContainsKey('PulseSeconds')) { $PulseSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pulseSeconds } else { 30 }
$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch\logs' } $resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch-Phase2\logs' }
$resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("browser-domains-{0}.log" -f $env:USERNAME) } $resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("browser-domains-{0}.log" -f $env:USERNAME) }
$resolvedIncidentLogPath = if ($IncidentLogPath) { $IncidentLogPath } else { Join-Path $resolvedLogsRoot ("dlp-incidents-{0}.log" -f $env:USERNAME) } $resolvedIncidentLogPath = if ($IncidentLogPath) { $IncidentLogPath } else { Join-Path $resolvedLogsRoot ("dlp-incidents-{0}.log" -f $env:USERNAME) }
$resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true } $resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true }
+2 -2
View File
@@ -11,8 +11,8 @@ param(
[string]$Version = 'v0.13.2', [string]$Version = 'v0.13.2',
[string]$PackageUrl, [string]$PackageUrl,
[string]$PackageZipPath, [string]$PackageZipPath,
[string]$InstallRoot = 'C:\Program Files\ActivityWatch', [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2',
[string]$StateRoot = 'C:\ProgramData\ActivityWatch', [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2',
[int]$PollSeconds = 5, [int]$PollSeconds = 5,
[int]$PulseSeconds = 30, [int]$PulseSeconds = 30,
[int]$RecoveryIntervalSeconds = 180, [int]$RecoveryIntervalSeconds = 180,
+2 -2
View File
@@ -11,8 +11,8 @@ param(
[string]$Version = 'v0.13.2', [string]$Version = 'v0.13.2',
[string]$PackageUrl, [string]$PackageUrl,
[string]$PackageZipPath, [string]$PackageZipPath,
[string]$InstallRoot = 'C:\Program Files\ActivityWatch', [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2',
[string]$StateRoot = 'C:\ProgramData\ActivityWatch', [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2',
[int]$PollSeconds = 5, [int]$PollSeconds = 5,
[int]$PulseSeconds = 30, [int]$PulseSeconds = 30,
[int]$RecoveryIntervalSeconds = 180, [int]$RecoveryIntervalSeconds = 180,
+2 -2
View File
@@ -10,8 +10,8 @@ param(
[string]$Version = 'v0.13.2', [string]$Version = 'v0.13.2',
[string]$PackageUrl, [string]$PackageUrl,
[string]$PackageZipPath, [string]$PackageZipPath,
[string]$InstallRoot = 'C:\Program Files\ActivityWatch', [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2',
[string]$StateRoot = 'C:\ProgramData\ActivityWatch', [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2',
[int]$PollSeconds = 5, [int]$PollSeconds = 5,
[int]$PulseSeconds = 30, [int]$PulseSeconds = 30,
[int]$RecoveryIntervalSeconds = 180, [int]$RecoveryIntervalSeconds = 180,
+3 -3
View File
@@ -1,6 +1,6 @@
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json', [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json',
[string]$ServerHost, [string]$ServerHost,
[int]$ServerPort, [int]$ServerPort,
[ValidateSet('http', 'https')] [ValidateSet('http', 'https')]
@@ -713,9 +713,9 @@ $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath
$resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' }
$resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 }
$resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' } $resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' }
$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig -and $deploymentConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch\dlp-policy.json' } $resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig -and $deploymentConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' }
$resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 } $resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 }
$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch\logs' } $resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch-Phase2\logs' }
$resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("endpoint-signals-{0}.log" -f $env:USERNAME) } $resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("endpoint-signals-{0}.log" -f $env:USERNAME) }
$resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true } $resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true }
$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'ActivityWatch-Phase2\\incident-artifacts' } $resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'ActivityWatch-Phase2\\incident-artifacts' }
+3 -3
View File
@@ -1,6 +1,6 @@
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json', [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json',
[string]$ServerHost, [string]$ServerHost,
[int]$ServerPort, [int]$ServerPort,
[ValidateSet('http', 'https')] [ValidateSet('http', 'https')]
@@ -45,8 +45,8 @@ if (-not $existingConfig -and (-not $ServerHost)) {
throw 'deployment-config.json отсутствует. Укажите -ServerHost и параметры пользователей либо сначала выполните скрипт развёртывания.' throw 'deployment-config.json отсутствует. Укажите -ServerHost и параметры пользователей либо сначала выполните скрипт развёртывания.'
} }
$effectiveStateRoot = if ($StateRoot) { $StateRoot } elseif ($existingConfig) { [string]$existingConfig.paths.stateRoot } else { 'C:\ProgramData\ActivityWatch' } $effectiveStateRoot = if ($StateRoot) { $StateRoot } elseif ($existingConfig) { [string]$existingConfig.paths.stateRoot } else { 'C:\ProgramData\ActivityWatch-Phase2' }
$effectiveInstallRoot = if ($InstallRoot) { $InstallRoot } elseif ($existingConfig) { [string]$existingConfig.paths.installRoot } else { 'C:\Program Files\ActivityWatch' } $effectiveInstallRoot = if ($InstallRoot) { $InstallRoot } elseif ($existingConfig) { [string]$existingConfig.paths.installRoot } else { 'C:\Program Files\ActivityWatch-Phase2' }
$effectiveLogsRoot = if ($existingConfig) { [string]$existingConfig.paths.logsRoot } else { Join-Path $effectiveStateRoot 'logs' } $effectiveLogsRoot = if ($existingConfig) { [string]$existingConfig.paths.logsRoot } else { Join-Path $effectiveStateRoot 'logs' }
$effectiveConfigPath = if ($ConfigPath) { $ConfigPath } else { Join-Path $effectiveStateRoot 'deployment-config.json' } $effectiveConfigPath = if ($ConfigPath) { $ConfigPath } else { Join-Path $effectiveStateRoot 'deployment-config.json' }
$effectiveLaunchScript = Join-Path $effectiveStateRoot 'launch-watchers.ps1' $effectiveLaunchScript = Join-Path $effectiveStateRoot 'launch-watchers.ps1'
@@ -53,10 +53,10 @@
Эти файлы/папки появляются на целевом Windows-хосте во время/после деплоя: Эти файлы/папки появляются на целевом Windows-хосте во время/после деплоя:
- `C:\ProgramData\ActivityWatch\deployment-config.json` - `C:\ProgramData\ActivityWatch-Phase2\deployment-config.json`
- `C:\ProgramData\ActivityWatch\web-category-rules.json` - `C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json`
- `C:\ProgramData\ActivityWatch\dlp-policy.json` - `C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json`
- `C:\ProgramData\ActivityWatch\logs\*` - `C:\ProgramData\ActivityWatch-Phase2\logs\*`
- `%LOCALAPPDATA%\ActivityWatch-Phase2\incident-artifacts\*` - `%LOCALAPPDATA%\ActivityWatch-Phase2\incident-artifacts\*`
## 4) Опционально приложить в операторский install-kit ## 4) Опционально приложить в операторский install-kit
+1 -1
View File
@@ -1,6 +1,6 @@
[CmdletBinding()] [CmdletBinding()]
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json' [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json'
) )
Set-StrictMode -Version Latest Set-StrictMode -Version Latest
+1 -1
View File
@@ -1,5 +1,5 @@
param( param(
[string]$ConfigPath = 'C:\ProgramData\ActivityWatch\deployment-config.json', [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json',
[string]$Hostname, [string]$Hostname,
[int]$PollSeconds = 30 [int]$PollSeconds = 30
) )