PowerShell Vault
На работе в локальной сети использовалась задача, которая перемещала старые, по долгу не использовавшиеся, файлы из главного файлового хранилища в резервное. Но так как организация являлась проектной, то старые файлы могли понадобиться в любое время.
Задача использовала простой скрипт с фильтрацией файлов по параметрам время создания и время изменения. Я чуть доработали скрипт и решил опубликовать его для других администраторов. Вдруг, пригодится. Только перед использованием прошу проверить скрипт в какой-нибудь песочнице.
Есть вероятность, что скрипт удалит все файлы в вашем файловом хранилище, из-за того, что автор может оказаться рукожопом! Поэтому, перед боевой задачей, проверьте скрипт в какой-нибудь песочнице. А кто хорошо разбирается в #PowerShell - автор будет благодарен за оптимизацию и корректировку скрипта.
Параметры
-M
-Mode
- режим работы скрипта. По умолчанию'MV'
.'CP'
- копировать файлы из источника в хранилище.'MV'
- перемещать файлы из источника в хранилище.'RM'
- только удалять файлы из источника без копирования или перемещения куда-либо.
-SRC
-Source
- путь к директории откуда перемещать файлы. Например,-SRC 'C:\Data\Source'
. По умолчанию:${PSScriptRoot}\Source
.-DST
-Vault
- путь к директории куда перемещать файлы. Например,-DST 'C:\Data\Vault'
. По умолчанию:${PSScriptRoot}\Vault
.-CT
-CreationTime
- время создания файла в секундах. Например,-CT 5270400
. По умолчанию:5270400
(61 день).-WT
-LastWriteTime
- время изменения файла в секундах. Например,-WT 5270400
. По умолчанию:${P_CreationTime}
.-FS
-FileSize
- размер файла. Например,-FS '5kb'
или-FS '12mb'
. По умолчанию:'0kb'
.-E
-Exclude
- путь к файлу с исключениями. Например,-E 'C:\Data\exclude.txt'
. По умолчанию:${PSScriptRoot}\vault.exclude.txt
.-L
-Logs
- путь к директории с журналами работы скрипта. Например,-L 'C:\Data\Logs'
. По умолчанию:${PSScriptRoot}\Logs
.-RD
-RemoveDirs
- удалять пустые каталоги.-O
-Overwrite
- перезаписать файлы в Vault.
Примеры
Запустить перемещение файлов из Source
в Vault
с сохранением структуры директорий:
Запустить перемещение файлов с временем создания и изменения от 10 дней (864000
) из Source
в Vault
с сохранением структуры директорий:
Запустить перемещение файлов с временем создания и изменения от 10 дней (864000
) и размером более 32 мегабайта (32mb
) из Source
в Vault
с сохранением структуры директорий:
Запустить перемещение файлов с временем создания и изменения от 10 дней (864000
), и с перезаписью файлов с одинаковыми названиями (-O
) из Source
в Vault
с сохранением структуры директорий:
Параметр -O
означает, что не нужно архивировать старый файл при перемещении нового с таким же названием. Старый файл в хранилище перезапишется новым.
Алгоритм работы
Скрипт создаёт хранилище старых файлов. Это, своего рода, аналог резервного копирования. При перемещении файлов из источника в хранилище, скрипт обрабатывает несколько заданных параметров и фильтров. Всё настроить можно под себя. По умолчанию, скрипт перемещает файлы из источника в хранилище, и если в хранилище уже имеется старый файл с названием кау у нового перемещаемого, то старый файл архивируется с меткой .[UnixTime].7z
.
Для работы скрипта необходим архиватор 7-Zip, а конкретно его облегчённая версия 7za.exe
с библиотеками из 7-Zip Extra. Скачать можно с официального сайта. После скачивания архива, файлы 7za.exe
, 7za.dll
и 7zxa.dll
нужно разместить рядом со скриптом, или в любую дочернюю директорию. Скрипт сам найдёт путь к 7za.exe
.
Скрипт
Источники:
2023-10-23
- Откорректирован скрипт
pwsh.vault.ps1
.- Исправлены ошибки.
- Проведена оптимизация.
- Переделаны параметры.
2023-10-24
- Откорректирован скрипт
pwsh.vault.ps1
.- Проведена оптимизация.
- Переделаны параметры.
- Изменена метка архивных файлов.
2023-11-19
- Удаление скрипта
pwsh.vault.ps1
. - Добавление модуля
PowerShell Vault
.