Skip to content

Releases: qtronixx/FileShare_Backup_Scripts

Added integration with Naumen ITSM 365 / Добавлена интеграция с Naumen ITSM 365

Choose a tag to compare

@qtronixx qtronixx released this 24 Sep 08:05

English | Русский

v 4.4 integration with Naumen ITSM 365

  • Added integration with Naumen ITSM 365: a ticket is created via the REST API
    only in the event of a CRITICAL FAILURE. Deduplication is based on sourceMesId —
    a recurring failure of the same task adds a comment to the existing ticket
    instead of creating a new one.
  • SD: assignment to a team (SdTeam), service (SdService), and category
    (SdCategory → baseCategory attribute); creation without an explicit state; deduplication.
  • Added the -TestServiceDesk parameter: creates a single test ticket in Service Desk
    with a unique sourceMesId without launching Robocopy — allows for verifying
    the Naumen ITSM 365 configuration without risking actual task data.
  • Added proxy support for Telegram notifications (ProxyUrl / ProxyUseDefaultCredentials).
  • Proxy settings (ProxyUrl/ProxyUseDefaultCredentials) apply ONLY to requests
    sent to Telegram; requests to Naumen ITSM 365 are always sent directly, bypassing the proxy.

Русский | English

v 4.4 интеграция с Naumen ITSM 365

  • Добавлена интеграция с Naumen ITSM 365: при КРИТИЧЕСКОМ СБОЕ (и только при нём)
    создаётся заявка через REST API. Дедупликация по sourceMesId — повторный сбой
    той же задачи добавляет комментарий к уже открытой заявке вместо новой.
  • SD: назначение на команду (SdTeam), услуга (SdService), категория
    (SdCategory → атрибут baseCategory); создание без явного state; дедупликация
  • Добавлен параметр -TestServiceDesk: создаёт одну тестовую заявку в Service Desk
    с отдельным sourceMesId, без запуска Robocopy — для проверки конфигурации
    Naumen ITSM 365 без риска для боевых данных задачи.
  • Добавлена поддержка прокси для отправки в Telegram (ProxyUrl / ProxyUseDefaultCredentials).
  • Прокси (ProxyUrl/ProxyUseDefaultCredentials) применяется ТОЛЬКО к запросам в
    Telegram — запросы к Naumen ITSM 365 всегда идут напрямую, без прокси.

переведён на многозадачную конфигурацию / uses a layered multi-task configuration

Choose a tag to compare

@qtronixx qtronixx released this 15 Sep 13:50
9a5ba9a

What's Changed

см. [English version](#english)

Кратко: скрипт резервного копирования переведён на многозадачную конфигурацию (common.psd1 + tasks/*.psd1), убран хардкод секретов, исправлена логика классификации ошибок Robocopy, добавлена защита от параллельного запуска и Unicode-логирование.

Основные изменения:

  • Конфигурация вынесена в .psd1: общий common.psd1 (Telegram, коды ошибок, ретеншн логов) + конфиг задачи в tasks/*.psd1 (Source/Destination/исключения), трёхуровневое слияние (defaults → common → task) с валидацией обязательных полей.
  • Единый скрипт Invoke-MirrorBackup.ps1 обслуживает произвольное число независимых задач через параметр -ConfigPath — вместо отдельной копии скрипта под каждую шару/БД.
  • Токен Telegram и все настройки убраны из тела скрипта.
  • Unicode-лог Robocopy (/UNILOG:) — устранены проблемы с кириллицей в путях и именах файлов.
  • Защита от параллельного запуска: Mutex уникален для каждой задачи (TaskName) — разные задачи не блокируют друг друга.
  • Проверка доступности источника и свободного места на диске назначения перед стартом.
  • Ретраи (до 3 попыток) и таймаут при отправке уведомлений в Telegram, поддержка parse_mode: Markdown.
  • Новая опция задачи CopyAcls — управляет флагом /SEC индивидуально (шара — да, каталог с дампами БД — нет).
  • Новая опция TreatCopiedFailuresAsWarning — код возврата Robocopy с битом 8 («часть файлов не скопирована») теперь явно помечается статусом «ВНИМАНИЕ», а не тихо засчитывается как «УСПЕХ».
  • Автоматическая ротация (удаление) старых логов по LogRetentionDays.
  • Добавлен режим -DryRun (/L) для тестового прогона без реальных изменений.
  • Общий try/catch/finally — необработанное исключение теперь тоже уходит уведомлением в Telegram, а не теряется молча.
  • Добавлены README.md, common.psd1.example и .gitignore для безопасной публикации в git.

Миграционные заметки:

  • Отзовите любой токен, ранее захардкоженный в старых версиях скриптов, — новый токен переносится в common.psd1 (в git не коммитится, см. .gitignore).
  • Два отдельных скрипта (шара / БД) заменяются одним Invoke-MirrorBackup.ps1 + конфигами в tasks/ — обновите задания в Планировщике заданий на новую команду с -ConfigPath.
  • Примените NTFS-права (icacls) на папку со скриптом и common.psd1 — там теперь хранится токен открытым текстом.
  • Пути и префиксы логов задаются в LogDir/LogFilePrefix конфига задачи — при необходимости сохранить прежнюю структуру, укажите старые значения.

Как тестировать:

  1. Скопировать common.psd1.example → common.psd1, вписать BotToken/ChatId.
  2. Проверить конфиги задач в tasks/ (share01.psd1, sql01.psd1).
  3. Прогнать вхолостую: Invoke-MirrorBackup.ps1 -ConfigPath tasks\share01.psd1 -DryRun.
  4. Проверить лог задачи и сообщение «ЗАПУСК» в Telegram.
  5. Запустить без -DryRun, проверить итоговый статус (УСПЕХ / ВНИМАНИЕ / КРИТИЧЕСКИЙ СБОЙ) и соответствующее сообщение.
  6. Запустить обе задачи параллельно и убедиться, что они не блокируют друг друга (разные Mutex).

English

Summary: the backup script now uses a layered multi-task configuration (common.psd1 + tasks/*.psd1), hardcoded secrets were removed, Robocopy error-classification logic was fixed, and concurrent-run protection plus Unicode logging were added.

Key changes:

  • Configuration moved to .psd1: shared common.psd1 (Telegram, error codes, log retention) + per-task config in tasks/*.psd1 (Source/Destination/exclusions), merged in three layers (defaults → common → task) with required-field validation.
  • A single Invoke-MirrorBackup.ps1 script now handles any number of independent jobs via -ConfigPath, replacing separate script copies per share/database.
  • Telegram token and all settings removed from the script body.
  • Robocopy now writes a Unicode log (/UNILOG:) — fixes garbled Cyrillic file/path names.
  • Concurrent-run protection: the Mutex name is unique per task (TaskName) — different jobs no longer block each other.
  • Source availability and destination free-space checks run before Robocopy starts.
  • Telegram notifications now retry (up to 3 attempts) with a timeout, and use parse_mode: Markdown.
  • New per-task CopyAcls option controls the /SEC flag individually (file shares — yes, database dump folders — no).
  • New TreatCopiedFailuresAsWarning option: a Robocopy exit code with bit 8 set ("some files were not copied") is now explicitly flagged as WARNING instead of silently reporting SUCCESS.
  • Old logs are now automatically pruned based on LogRetentionDays.
  • Added a -DryRun mode (/L) for a no-op test pass.
  • The whole script is wrapped in try/catch/finally — unhandled exceptions now trigger a Telegram alert instead of failing silently.
  • Added README.md, common.psd1.example, and .gitignore for safe publication to git.

Migration notes:

  • Revoke any token previously hardcoded in older script versions — the new token goes into common.psd1 (not committed to git; see .gitignore).
  • The two separate scripts (share / database) are replaced by one Invoke-MirrorBackup.ps1 plus configs under tasks/ — update your Task Scheduler entries to the new -ConfigPath command.
  • Apply NTFS permissions (icacls) to the script folder and common.psd1 — it now stores the token in plain text.
  • Log paths/prefixes come from each task's LogDir/LogFilePrefix — set them to the previous values if you need to keep the old log layout.

How to test:

  1. Copy common.psd1.example → common.psd1, fill in BotToken/ChatId.
  2. Review the task configs under tasks/ (share01.psd1, sql01.psd1).
  3. Do a dry run: Invoke-MirrorBackup.ps1 -ConfigPath tasks\share01.psd1 -DryRun.
  4. Check the task log and the "STARTED" Telegram message.
  5. Run without -DryRun and verify the final status (SUCCESS / WARNING / CRITICAL) and matching message.
  6. Run both tasks in parallel and confirm they don't block each other (separate Mutexes).

v1.1.0 — Улучшения конфигурации, логирования, ротации и управления Telegram. EN v1.1.0 — Config, logging, rotation and Telegram control improvements

Choose a tag to compare

@qtronixx qtronixx released this 19 Dec 11:07
112f349

What's Changed

us English version

Кратко: улучшена надёжность и управляемость скрипта резервного копирования: добавлена валидация конфигурации, гибкое управление задачами, централизованное логирование и улучшенная ротация/архивация логов; добавлен контроль отправки уведомлений в Telegram.

Основные изменения:

  • Валидация и нормализация config.psd1 (проверка Tasks, уникальность Name/LogName, приведение числовых значений и defaults).
  • Новый параметр запуска -TaskName — выполнить указанные задачи (выполняются даже если Enabled = $false).
  • Поведение Enabled: без аргументов выполняются только Enabled = $true задачи; с -TaskName выполняются указанные задачи независимо от Enabled.
  • Главный лог в корне LogDirectory + пер-задачные логи в _log/.
  • Ротация: рекурсивный перенос старых логов в Archive/yyyy/MM/... с сохранением структуры; опциональная ZIP-архивация месячных папок и удаление оригиналов (настройка в конфиге).
  • Управление уведомлениями: новая опция SendTelegram (по умолчанию — включено), при выключении сообщения записываются в главный лог вместо отправки.
  • Новые опции конфигурации: ArchiveCompression, ArchiveKeepOriginal, LogLevel. Добавлен шаблон задачи и подсказка по использованию BOT_TOKEN = $env:SYNC_BOT_TOKEN.
  • Документация обновлена: README.md, README.ru.md.

Миграционные заметки:

  • Рекомендуется убрать/заменить BOT_TOKEN в репозитории: использовать BOT_TOKEN = $env:SYNC_BOT_TOKEN.
  • Перенесены пер-задачные логи в подкаталоги — проверьте внешние интеграции, ожидающие старой структуры.
  • По-умолчанию: SendTelegram = $true, ArchiveCompression = $true, ArchiveKeepOriginal = $false.

Как тестировать:

  1. Скопировать config.psd1.example → config.psd1, отредактировать LogDirectory, BOT_TOKEN/SYNC_BOT_TOKEN, CHAT_ID.
  2. Запустить без аргументов: sync_share.ps1 (выполняются только включённые задачи).
  3. Запустить с аргументом: .sync_share.ps1 -TaskName "SQL,fileshare" (выполняются указанные задачи независимо от Enabled).
  4. Проверить главный лог и пер-задачные логи, содержимое Archive и ZIP-архивы.

Release Notes (English)

Summary: Reliability, configurability and operational improvements: config validation, task invocation control, centralized logging, recursive rotation with optional ZIP compression, and Telegram notification control.

Highlights:

  • Config validation/normalization (Tasks, unique Name/LogName, numeric clamping, defaults).
  • -TaskName parameter to run specific tasks (runs even if Enabled = $false).
  • Default run without args executes only Enabled = $true tasks.
  • Main script log + per-task log folders; rotation preserves subfolder structure under Archive/yyyy/MM.
  • Optional monthly ZIP compression and removal of originals (configurable).
  • SendTelegram flag to disable sending messages (messages written to main log when disabled).
  • New config options: ArchiveCompression, ArchiveKeepOriginal, LogLevel. Docs updated.

Files changed: sync_share.ps1, config.psd1, README.md, README.ru.md.

Migration notes: use BOT_TOKEN = $env:SYNC_BOT_TOKEN; per-task logs moved to _log/.

Test steps: copy config example, run sync_share.ps1 and .sync_share.ps1 -TaskName "SQL,fileshare", inspect logs and archives.

@qtronixx in #1

New Contributors

Full Changelog: 1.0.1...1.1.0

v1.0.1 - Bilingual documentation and config updates

Choose a tag to compare

@qtronixx qtronixx released this 18 Dec 12:32
  • Added comprehensive English version of the documentation.
  • Improved section navigation for bilingual support.
  • Detailed the Robocopy error handling logic and Telegram notification system.
  • Added English translations for all configuration parameters and sections.
  • Updated file encoding requirements (UTF-8 with BOM).
  • Clarified settings inheritance and logging mechanisms.

ru

  • Добавлена полная версия документации на английском языке.
  • Улучшена навигация по разделам для двуязычной поддержки.
  • Подробно описана логика обработки ошибок Robocopy и система оповещения Telegram.
  • Добавлены переводы на английский язык для всех параметров конфигурации и разделов.
  • Обновлены требования к кодировке файлов (UTF-8 со спецификацией).
  • Уточнены механизмы наследования настроек и ведения журнала.

Multi-Task Sync Engine v1.0.

Choose a tag to compare

@qtronixx qtronixx released this 18 Dec 10:08
154f594

Движок резервного копирования на PowerShell + Robocopy. Поддержка множества задач в одном конфиге, умное наследование настроек, уведомления в Telegram и глубокий анализ ошибок по Win32 HEX-кодам.

Стабильная версия. Добавлена логика наследования параметров и исправлена ошибка передачи массивов исключений в Robocopy через PowerShell."