Познавательный PowerShell

13.05.22

Разработка - Языки и среды

Еще немного PowerShell нам в помощь.

Мы снова здесь!

В прошлогодней статье "Занимательный PowerShell" мы уже говорили про применение мощного скриптового языка PowerShell для решения насущных задач.

Сегодня мы пробежимся по новым скриптам и задачам, которые с их помощью можно решить. От задач связанных с платформой 1С, так и до более отдаленных.

В этот раз мы не будем рассматривать настройку окружения, различных инструментов для разработки скриптов на PowerShell и связанные с этим темы. Все это Вы можете посмотреть в предыдущей статье.

Итак, ближе к делу!

Удаляйте журналы вовремя

Все мы знаем, что журналы регистрации платформа 1С хранит в каталоге кластера, а точнее в подкаталогах каждой информационной базы. Это не относится к файловым базам, но они нам не интересны.

С учетом того, что остается только текстовый вариант журнала, ведь из-за известных проблем SQLite-формата сама фирма "1С" отказывается от него (но это не точно?), встает задача периодической очистки файлов для освобождения места.

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

 

Тогда на каждый день мы будем получать новые файлы. В большинстве случаев старые файлы не будут заняты серверными процессами платформы 1С и могут быть спокойно удалены.

Затем берем скрипт очистки от файлов журнала регистрации.

 
 Очистка от старых файлов журнала регистрации

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

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "<ПутьКФайлуСоСкриптом>.ps1"

Задача решена, теперь поехали дальше.

Ох уж эти COM-объекты

В прошлой статье мы уже рассматривали действия по регистрации, удалению регистрации и проверке работы COM-компоненты платформы 1С. Теперь перейдем на другой уровень!

Всем известно, что на одном сервере могут быть зарегистрированы COM-компоненты разных версий платформы 1С. Есть даже замечательные инструкции по этому поводу:

Но почему бы не автоматизировать этот процесс и выполнять регистрацию COM-компонентов по одному щелчку.

 
 Регистрация множества COM-компонентов разных версий платформы 1С

Таким образом, одним кликом можно устанавливать множество COM-компонентов разных версий платформ 1С. И доустанавливать новые версии тоже. Не забывайте запускать скрипт с нужными привилегиями. Классная картина, не правда ли.

 

Но зарегистрировать и установить - это одно дело. Иногда нужно еще и узнать какие COM-компоненты уже зарегистрированы в системе. И тут могут быть сложности, ведь регистрацию можно выполнить как с помощью утилиты "regsvr32.exe", так и с помощь оснастки "Службы компонентов" (та, что на скрине выше). Так узнаем же!

 
 Список всех зарегистрированных COM-компонетов

Вот такой результат мы можем получить.

 

Но и это еще не все! Иногда можно столкнуться с непонятными ошибками при регистрации компонентов. В качестве кардинального решения можно удалить все зарегистрированные компоненты, перезагрузить сервер и начать заново. В этом нам поможет новый скрипт!

 
 Удаление всех зарегистрированных COM-компонентов

Теперь Вы можете массово регистрировать и удалять COM-компоненты платформы 1С разных версий, а также просто получать список всех зарегистрированных компонентов на сервере.

Немного Outlook

Что мы все об 1С?! Давайте посмотрим на другие задачи. Например, работу с Microsoft Outlook. Этот замечательный почтовый клиент из пакета MS Office есть во многих компаниях. И частенько можно получить задачу по загрузке контактов и групп контактов в почтовый клиент из файлов или других источников.

Ниже пример скрипта как загружать контакты и группы.

 
 Загрузка контактов в Outlook

Да, это намного проще, чем регистрировать COM-компоненты 1С разных версий :).

Работаем с сервисами Yandex

У компании "Яндекс" множество полезных сервисов. С ними можно работать из bash, 1С и любых других языков и платформ, в том числе и из PowerShell.

В скрипте ниже пример обращения к сервису перевода из Яндекс.Облака.

 
 Работа с Яндекс.Облаком из PowerShell

Используя этот пример можно обращаться и к другим сервисом Яндекса.

Заблокирован ли файл?

Еще задачей может быть проверка заблокирован ли файл другим приложением.

 
 Заблокирован ли файл?

Надежное копирование файлов

Для надежного копирования файлов по сети можно использовать утилиты Robocopy. Из PowerShell это выглядит так.

 
 Использование Robocopy из PowerShell

Сессии Windows

И под конец самый простой пример - получаем список сессий Windows и завершаем их по необходимости.

 
 Работа с сессиями Windows

Хватит, пожалуй

Порция примеров работы с PowerShell закончена. Но кейсов использования этого прекрасного инструмента бесконечное количество. Все самое интересное можно найти в официальной документации, GitHub и на других просторах интернета.

И никакого кода 1С в статье!

PowerShell еще вернется! Удачи в делах и хорошего настроения!

Другие ссылки

Авторские разработки

 
 Другие разработки (бесплатные и за $m)

PowerShell скрипты автоматизация администрирование скрипт script

См. также

Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)

Будем писать свои скрипты на питоне и запускать их на 1С.

15.04.2024    2679    YA_418728146    13    

61

Мобильная разработка Языки и среды 1С:Элемент Программист Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    12799    ROk_dev    69    

44

Языки и среды Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    5762    SeiOkami    21    

58

Языки и среды Программист Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    3731    acvatoris    6    

15

Языки и среды Программист Платформа 1С v8.3 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    3287    prohorp    15    

12

Языки и среды Программист Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    2094    0    kembrik    2    

7

Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)

При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.

13.03.2023    1150    1CUnlimited    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. itoptimum 24 13.05.22 04:50 Сейчас в теме
"1С великолепна!!!"
Будет переведен вот в этот:

Результат перевода:
.NET is awesome!!!


серьезно?
2. frkbvfnjh 799 13.05.22 06:08 Сейчас в теме
В этом скриптовом языке слишком много знака доллара - постепенно начинаешь все больше ненавидеть доллары и омерику :)
3. пользователь 13.05.22 07:01
(2) загнивающий запад и все такое? :))))
4. Obertone 77 13.05.22 07:13 Сейчас в теме
Было ли применение нажатия клавиш через PowerShell-скрипт или нет, но PowerShell-скрипт имитации нажатия клавиш помог сделать полноценным открытие сессии окон 1С: https://infostart.ru/public/1523127/
YPermitin; +1 Ответить
5. sapervodichka 6863 13.05.22 11:53 Сейчас в теме
+100500
Прикрепленные файлы:
user1433102; +1 Ответить
7. CheBurator 3126 14.05.22 19:39 Сейчас в теме
а почему нельзя сразу через cmd запустить robocopy с параметрами, а делаем такое извращение?
fort13; SerVer1C; +2 Ответить
9. пользователь 14.05.22 20:21
(7) А зачем нужен PowerShell, если можно все через cmd делать? :)))

Если ответить на этот вопрос, то подобные вопросы все отпадут.
8. SerVer1C 785 14.05.22 19:47 Сейчас в теме
PS очень мутный язык (как и bash, batch скрипты). Уж лучше python использовать.
10. пользователь 14.05.22 20:25
(8) вообще разные инструменты с разными целями, задачами.

Это как на 1С задачи администрирования решать.

Но тут, конечно, бывают и исключения.
11. VitaliyCeban 461 16.05.22 14:15 Сейчас в теме
(8) Я подобные задачи решаю через dotnet-script https://github.com/filipw/dotnet-script.
Нормальный C# 10 (.NET 6), возможность отладки. А у PS язык отталкивающий.
12. sergey_s_ 18.05.22 06:13 Сейчас в теме
Добрый день!

Подскажите (не пинайте сильно) как изменить "скрипт очистки от файлов журнала регистрации"
что-бы он чистил логи на 2-х серверах 1С порты: 1540 и 2540
При запуске данного скрипта очищаются логи только на сервере 1С на порту 2540
13. sergvagner2018 24.05.22 19:17 Сейчас в теме
Статья взята на заметку!
14. MadStrange 01.06.22 09:33 Сейчас в теме
(12)
одскажите (не пинайте сильно) как изменить "скрипт очистки от файлов журнала регистрации"
что-бы он чистил логи на 2-х серверах 1С порты: 1540 и 2540
При запуске данного скрипта очищаются логи только на сервере 1С на порту 2540


Если еще актуально.
вообще вот эта конструкция и призвана найти все запущенные сервера
$services1C = Get-WmiObject win32_service | ?{$_.Name -like '*'} |
    Select Name, DisplayName, State, PathName | 
    Where-Object { $_.PathName  -Like "*ragent.exe*" };



а вот эта, типо, цикл по ним
$services1C | % {...}


запустите в powershell (прям в консоли первую конструкцию), затем выведите полученное значение переменной $services1C. Для этого достаточно имя переменной со знаком $ написать в powershell. Полученный вывод пишите сюда, посмотрим.
15. MadStrange 01.06.22 09:38 Сейчас в теме
(12)
одскажите (не пинайте сильно) как изменить "скрипт очистки от файлов журнала регистрации"
что-бы он чистил логи на 2-х серверах 1С порты: 1540 и 2540
При запуске данного скрипта очищаются логи только на сервере 1С на порту 2540


Если еще актуально.
вообще вот эта конструкция и призвана найти все запущенные сервера
$services1C = Get-WmiObject win32_service | ?{$_.Name -like '*'} |
    Select Name, DisplayName, State, PathName | 
    Where-Object { $_.PathName  -Like "*ragent.exe*" };



а вот эта, типо, цикл по ним
$services1C | % {...}


запустите в powershell (прям в консоли первую конструкцию), затем выведите полученное значение переменной $services1C. Для этого достаточно имя переменной со знаком $ написать в powershell. Полученный вывод пишите сюда, посмотрим.
17. sergey_s_ 27.06.22 12:59 Сейчас в теме
Добрый день!
Был в отпуске, выполнил

(15)
запустите в powershell (прям в консоли первую конструкцию), затем выведите полученное значение переменной $services1C. Для этого достаточно имя переменной со знаком $ написать в powershell. Полученный вывод пишите сюда, посмотрим.


PS C:\Users\sergey> $services1C = Get-WmiObject win32_service | ?{$_.Name -like '*'} |
Select Name, DisplayName, State, PathName |
Where-Object { $_.PathName -Like "*ragent.exe*" };

$services1C

Name DisplayName State PathName
---- ----------- ----- --------
1C:Server agent 1540 1C:Server agent 1540 Running "C:\Program Files\1cv8\8.3.18.1779\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\s...
1C:Server agent 2540 1C:Server agent 2540 Running "C:\Program Files\1cv8\8.3.20.1674\bin\ragent.exe" -srvc -agent -regport 2541 -port 2540 -range 2560:2591 -d "C:\s...



PS C:\Users\sergey>
16. JetBrain 79 07.06.22 21:13 Сейчас в теме
...а как же старый добрый VBS :) сколько на нем написано и даже интеграции серьезные. powershell больше мне кажется удобней , как интерактивный инструмент для команд аналогичный работе в core Linux.
18. user1129453 23.06.23 05:12 Сейчас в теме
Отличная статья, как и предыдущая! Подскажите как запустить скрипт с правами админа?
Оставьте свое сообщение