Powershell удаление файлов

Довелось на днях реализовывать нехитрую задачку, которую средствами 1с не получилось сделать. Зато легко справился Powershell, изучать который я рекомендую всем разработчикам 1с. Этим мы с вами потихоньку и займемся. Поехали!

Исходные данные: На сетевой ресурс пользователи по выбору выгружают определенные файлы для своих целей (в нашем примере это будет локальный каталог “C:\TestFiles\“). Каждая выгрузка формирует папку в вышеуказанном каталоге с наименованием в формате “Выгрузка на дату ” + Строка(ТекущаяДата()) и подкаталоги с наименованием выгружавшего пользователя, в которых уже хранятся сами файлы.

Задача: Необходимо организовать регламентное задание, которое бы оставляла только 7 последних каталогов
“Выгрузка на дату ” + Строка(ТекущаяДата()) , а остальные, с более ранней даты, удаляло.

Решение 1с: Была написана процедура, алгоритм которой находил нужные папки и непосредственно удалял их. Но здесь возникла проблема: 1с не может удалять файлы (каталоги), у которых стоит свойство “Только для чтения” = Истина:

Свойство "Только чтение" = Истина
Свойство “Только для чтение”

Снять данный флаг с каталога сходу не получилось, да и ждать администратора, который был в отпуске то же не хотелось, поэтому было решено воспользоваться
объектно ориентированным программным движком Powershell.

Решение Powershell: Поскольку опыта разработки большего в этом приложении у меня нет, то пришлось склеивать решение из результатов поиска в интернете. Основные “командлеты”, свойства и параметры для решения этой задачи:

  • Get-ChildItem – Командлет, возвращает элементы (файлы) найденные в указанном месте;
  • .PSisContainer – Свойство, определяющее является ли данный файл каталогом (контейнером);
  • .Contains(‘Выгрузка на дату’) – метод, определяющий вхождение подстроки в строку;
  • .LastWriteTime – получаем время последнего изменения каталога;
  • Remove-Item – Командлет, который удаляет указанный каталог или файл;
  • -whatif – параметр, который выводит запрос или эмулирует выполнение команды (тестирование перед тем как запустить на боевых данных).

Ниже приведен полный код скрипта, в котором программисту 1с разобраться не составит никакого труда (хотя я и встречал на собеседование людей, которым бы и полдня не хватило бы что бы с этим разобраться ):

Это можно сказать готовый шаблон под похожие задачи. Вы можете его изменить под свои требования, переработав алгоритм.

Итоговый и отлаженный скрипт можно выполнять как вручную, так и добавив его в планировщик заданий Windows, который будет выполнять его по заданному расписанию.

Если вы до этого не работали с данным движком, то советую прочитать про команды, устанавливающие режимы выполнения скриптов:

  1. Set-ExecutionPolicy Unrestricted
  2. Set-ExecutionPolicy Restricted

Иначе программа вам просто-напросто может не дать возможности выполнить скрипт.

Данным примером я хотел в первую очередь показать, что не стоит только зацикливаться на 1с, а по возможности решать задачи разными средствами и расширять свой кругозор. Обидно когда говорят про 1с-ников, что они только и умеют, что писать кривой код на русском языке программирования. И зачастую это правда.

Рушим стереотипы! Познаем новое!

0
Сайты называются так, потому что доступ к ним происходит по протоколу.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *