Repository navigation
Releases: qtronixx/FileShare_Backup_Scripts
Releases · qtronixx/FileShare_Backup_Scripts
Release list
Added integration with Naumen ITSM 365 / Добавлена интеграция с Naumen ITSM 365
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 onsourceMesId—
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→baseCategoryattribute); creation without an explicitstate; deduplication. - Added the
-TestServiceDeskparameter: creates a single test ticket in Service Desk
with a uniquesourceMesIdwithout 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
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конфига задачи — при необходимости сохранить прежнюю структуру, укажите старые значения.
Как тестировать:
- Скопировать
common.psd1.example→common.psd1, вписатьBotToken/ChatId. - Проверить конфиги задач в
tasks/(share01.psd1,sql01.psd1). - Прогнать вхолостую:
Invoke-MirrorBackup.ps1 -ConfigPath tasks\share01.psd1 -DryRun. - Проверить лог задачи и сообщение «ЗАПУСК» в Telegram.
- Запустить без
-DryRun, проверить итоговый статус (УСПЕХ / ВНИМАНИЕ / КРИТИЧЕСКИЙ СБОЙ) и соответствующее сообщение. - Запустить обе задачи параллельно и убедиться, что они не блокируют друг друга (разные 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: sharedcommon.psd1(Telegram, error codes, log retention) + per-task config intasks/*.psd1(Source/Destination/exclusions), merged in three layers (defaults → common → task) with required-field validation. - A single
Invoke-MirrorBackup.ps1script 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
CopyAclsoption controls the/SECflag individually (file shares — yes, database dump folders — no). - New
TreatCopiedFailuresAsWarningoption: 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
-DryRunmode (/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.gitignorefor 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.ps1plus configs undertasks/— update your Task Scheduler entries to the new-ConfigPathcommand. - Apply NTFS permissions (
icacls) to the script folder andcommon.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:
- Copy
common.psd1.example→common.psd1, fill inBotToken/ChatId. - Review the task configs under
tasks/(share01.psd1,sql01.psd1). - Do a dry run:
Invoke-MirrorBackup.ps1 -ConfigPath tasks\share01.psd1 -DryRun. - Check the task log and the "STARTED" Telegram message.
- Run without
-DryRunand verify the final status (SUCCESS / WARNING / CRITICAL) and matching message. - 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
What's Changed
Кратко: улучшена надёжность и управляемость скрипта резервного копирования: добавлена валидация конфигурации, гибкое управление задачами, централизованное логирование и улучшенная ротация/архивация логов; добавлен контроль отправки уведомлений в 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.
Как тестировать:
- Скопировать config.psd1.example → config.psd1, отредактировать LogDirectory, BOT_TOKEN/SYNC_BOT_TOKEN, CHAT_ID.
- Запустить без аргументов: sync_share.ps1 (выполняются только включённые задачи).
- Запустить с аргументом: .sync_share.ps1 -TaskName "SQL,fileshare" (выполняются указанные задачи независимо от Enabled).
- Проверить главный лог и пер-задачные логи, содержимое 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.
New Contributors
Full Changelog: 1.0.1...1.1.0
v1.0.1 - Bilingual documentation and config updates
- 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.
Движок резервного копирования на PowerShell + Robocopy. Поддержка множества задач в одном конфиге, умное наследование настроек, уведомления в Telegram и глубокий анализ ошибок по Win32 HEX-кодам.
Стабильная версия. Добавлена логика наследования параметров и исправлена ошибка передачи массивов исключений в Robocopy через PowerShell."