🔧 Helcode | Хелкод | Скрипты и автоматизация
Друзья, у нас важные новости!
Мы долго работали над улучшением наших решений, и теперь пришло время сделать следующий шаг. Наша группа меняет название - теперь мы Helcode (от help + code), но остаёмся верными своей миссии: давать Вам интересный контент, делиться кейсами и полезными инструментами для автоматизации.
Почему Helcode?
⚙️ Яснее суть - код, который реально помогает в работе
⚙️ Больше масштаб - готовим новые продукты и сервисы
⚙️ Тот же контент - ещё больше скриптов, инструкций и готовых решений
Это не просто смена названия - это наш рост вместе с Вами!
💬 Как вам новое имя? Поделитесь Вашим мнением!
Друзья, у нас важные новости!
Мы долго работали над улучшением наших решений, и теперь пришло время сделать следующий шаг. Наша группа меняет название - теперь мы Helcode (от help + code), но остаёмся верными своей миссии: давать Вам интересный контент, делиться кейсами и полезными инструментами для автоматизации.
Почему Helcode?
⚙️ Яснее суть - код, который реально помогает в работе
⚙️ Больше масштаб - готовим новые продукты и сервисы
⚙️ Тот же контент - ещё больше скриптов, инструкций и готовых решений
Это не просто смена названия - это наш рост вместе с Вами!
💬 Как вам новое имя? Поделитесь Вашим мнением!
👌6👍5🥴1
Как проверить доступность порта?
Telnet, Netcat, Curl — что быстрее?
🧑💻 Проверить, открыт ли порт, можно десятком способов. Вот самые популярные.
Плюсы: просто.
Минусы: нет таймаута, не везде установлен.
Плюсы: быстро, есть таймаут (
Минусы: требует установки.
Плюсы: проверяет именно HTTP-ответ.
Минусы: только для веба.
Какой ваш любимый способ проверить порт?
🌐 @helcode | #bash
Telnet, Netcat, Curl — что быстрее?
🧑💻 Проверить, открыт ли порт, можно десятком способов. Вот самые популярные.
telnet (если есть) telnet example.com 80
Плюсы: просто.
Минусы: нет таймаута, не везде установлен.
nc (Netcat) nc -zv example.com 443
Плюсы: быстро, есть таймаут (
-w 5). Минусы: требует установки.
curl (для HTTP/HTTPS) curl -I http://example.com:80
Плюсы: проверяет именно HTTP-ответ.
Минусы: только для веба.
Какой ваш любимый способ проверить порт?
P.S. Если все три метода не работают, возможно, firewall вас ненавидит.
🌐 @helcode | #bash
👍5
Одноразовый HTTP-сервер за 1 команду
Нужно срочно передать файл? Поднимаем сервер за секунду!
Python 3
Ruby
PHP
⚙️ Использование:
- Раздача файлов в локальной сети.
- Быстрый тест HTML-страницы.
❗️Важно:
Не оставляйте такой сервер надолго — он не защищён!
Какой вариант вам удобнее?
🌐 @helcode | #bash
Нужно срочно передать файл? Поднимаем сервер за секунду!
Python 3
python3 -m http.server 8000
Ruby
ruby -run -e httpd . -p 8000
PHP
php -S 0.0.0.0:8000
⚙️ Использование:
- Раздача файлов в локальной сети.
- Быстрый тест HTML-страницы.
❗️Важно:
Не оставляйте такой сервер надолго — он не защищён!
Какой вариант вам удобнее?
P.S. Если порт 8000 занят, попробуйте 8080. Или 80, если есть права.
🌐 @helcode | #bash
🔥3
NoSQL — почему это не всегда хорошо?
NoSQL (MongoDB, Redis) — не панацея. Вот когда PostgreSQL лучше:
1. Нужны сложные JOIN-запросы
NoSQL не поддерживает JOIN в классическом виде.
2. Транзакции
PostgreSQL:
MongoDB: много документные транзакции сложнее.
3. ACID-гарантии
Если данные должны быть точными (банк, медсистемы), реляционные БД надёжнее.
В каких проектах вы предпочитаете NoSQL, а где — SQL?
🌐 @helcode | #sql
NoSQL (MongoDB, Redis) — не панацея. Вот когда PostgreSQL лучше:
1. Нужны сложные JOIN-запросы
NoSQL не поддерживает JOIN в классическом виде.
2. Транзакции
PostgreSQL:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT;
MongoDB: много документные транзакции сложнее.
3. ACID-гарантии
Если данные должны быть точными (банк, медсистемы), реляционные БД надёжнее.
В каких проектах вы предпочитаете NoSQL, а где — SQL?
P.S. Если MongoDB — это свобода, то PostgreSQL — это правила. И то, и другое нужно.
🌐 @helcode | #sql
👍4
Как работать с массивами в bash?
Циклы, сортировка, поиск — всё для массивов в bash
1. Создание массива
2. Доступ к элементам
3. Цикл по массиву
4. Фильтрация
Часто ли вы используете массивы в bash-скриптах?
🌐 @helcode | #bash
Циклы, сортировка, поиск — всё для массивов в bash
1. Создание массива
fruits=("Яблоко" "Груша" "Апельсин") 2. Доступ к элементам
echo ${fruits[0]} # Яблоко
echo ${fruits[@]} # Все элементы 3. Цикл по массиву
for fruit in "${fruits[@]}"; do
echo "Фрукт: $fruit"
done 4. Фильтрация
# Только элементы с буквой "а"
printf '%s\n' "${fruits[@]}" | grep "а"
Часто ли вы используете массивы в bash-скриптах?
P.S. Если скрипт работает не так, проверьте кавычки: "${array[@]}" и ${array[*]} — это не одно и то же!
🌐 @helcode | #bash
👍6❤1
Автоматическое обновление Windows-серверов
Модуль
1. Установка модуля
2. Проверка обновлений
3. Установка (с перезагрузкой, если нужно)
4. Добавляем в планировщик
❗️Важно:
- Тестируйте обновления в dev-среде!
- Можно исключить конкретные KB (
Как вы обновляете Windows-серверы? WSUS, SCCM или скрипты?
🌐 @helcode | #powershell
Модуль
PSWindowsUpdate позволяет апдейтить серверы без RDP. 1. Установка модуля
Install-Module -Name PSWindowsUpdate -Force
2. Проверка обновлений
Get-WindowsUpdate
3. Установка (с перезагрузкой, если нужно)
Install-WindowsUpdate -AcceptAll -AutoReboot
4. Добавляем в планировщик
Register-ScheduledJob -Name "AutoUpdate" -ScriptBlock {
Install-WindowsUpdate -AcceptAll -AutoReboot
} -Trigger (New-JobTrigger -Weekly -At "3:00 AM") ❗️Важно:
- Тестируйте обновления в dev-среде!
- Можно исключить конкретные KB (
-NotKBArticleID "KB1234567"). Как вы обновляете Windows-серверы? WSUS, SCCM или скрипты?
P.S. Если после обновления что-то сломалось, вините Patch Tuesday.
🌐 @helcode | #powershell
👍3
Скрипт, который автоматически находит и убивает процессы-зомби
🧟 «Зомби» едят память? Пора их остановить!
Зомби-процессы (со статусом
⚙️ Bash-скрипт для поиска и убийства
❔Как добавить в cron?
Часто ли вы сталкиваетесь с зомби-процессами?
🌐 @helcode | #bash
🧟 «Зомби» едят память? Пора их остановить!
Зомби-процессы (со статусом
Z) — это завершённые процессы, но ещё не закрытые родителем. ⚙️ Bash-скрипт для поиска и убийства
#!/bin/bash
# Ищем зомби-процессы
zombies=$(ps aux | awk '{if ($8=="Z") print $2}')
if [ -z "$zombies" ]; then
echo "Зомби не найдены. Все чисто!"
else
echo "Найдены зомби: $zombies"
kill -9 $zombies
fi
❔Как добавить в cron?
*/10 * * * * /path/to/kill_zombies.sh
Часто ли вы сталкиваетесь с зомби-процессами?
P.S. Если зомби возвращаются, возможно, проблема в родительском процессе. Ищите root cause!
🌐 @helcode | #bash
👍6
Темная сторона cron: 5 скрытых опасностей
Cron кажется простым, пока не сломает продакшн
1. Переменные окружения
Cron не знает ваш
2. Перенаправление вывода
Без
3. Блокировки (race conditions)
Если скрипт работает дольше интервала, запустятся две копии. Решение:
4. Разные шеллы
Cron использует
5. Неправильное время
Cron живёт в UTC, а не в вашем часовом поясе. Проверяйте:
Какие грабли с cronом вас больно били?
🌐 @helcode | #bash
Cron кажется простым, пока не сломает продакшн
1. Переменные окружения
Cron не знает ваш
$PATH! Всегда указывайте полные пути: 0 * * * * /usr/bin/python3 /scripts/backup.py
2. Перенаправление вывода
Без
> /dev/null 2>&1 cron будет слать письма на локальную почту. 3. Блокировки (race conditions)
Если скрипт работает дольше интервала, запустятся две копии. Решение:
flock -n /tmp/script.lock /scripts/script.sh
4. Разные шеллы
Cron использует
/bin/sh, а не ваш любимый bash. Тестируйте так: /bin/sh -c "/scripts/test.sh"
5. Неправильное время
Cron живёт в UTC, а не в вашем часовом поясе. Проверяйте:
TZ=Europe/Moscow date
Какие грабли с cronом вас больно били?
P.S. Если cron молчит, проверьте /var/log/syslog — там обычно есть ответ.
🌐 @helcode | #bash
👍3❤1
Автоматизация пентеста: сканирование уязвимостей в один клик
🔓 Хотите проверить свою сеть? Автоматизируем поиск дыр!
1. Быстрое сканирование открытых портов (Nmap)
2. Проверка уязвимостей (Nikto для веба)
3. Автоматический отчёт (сборка в HTML)
❗️Важно:
- Делайте только с разрешения!
- Для автоматизации используйте Metasploit Framework или OpenVAS.
Какие инструменты для пентеста вы используете чаще всего?
🌐 @helcode | #bash
🔓 Хотите проверить свою сеть? Автоматизируем поиск дыр!
1. Быстрое сканирование открытых портов (Nmap)
nmap -sV -T4 192.168.1.0/24 -oN scan.txt
2. Проверка уязвимостей (Nikto для веба)
nikto -h http://example.com -output vuln.html
3. Автоматический отчёт (сборка в HTML)
nmap -sV --script=vulners -oX scan.xml 192.168.1.1
xsltproc scan.xml -o report.html
❗️Важно:
- Делайте только с разрешения!
- Для автоматизации используйте Metasploit Framework или OpenVAS.
Какие инструменты для пентеста вы используете чаще всего?
P.S. Если Nmap ругается на права, попробуйте sudo или nmap -Pn.
🌐 @helcode | #bash
👍5
Скрипт, который автоматически пишет вам оправдания
Генератор случайных "технических" оправданий для начальства. Пост шуточный, всерьез не воспринимайте :)
Python-скрипт
Bash-версия
Какое ваше любимое "техническое" оправдание?
🌐 @helcode | #python #bash
Генератор случайных "технических" оправданий для начальства. Пост шуточный, всерьез не воспринимайте :)
Python-скрипт
import random
excuses = [
"Это баг в библиотеке, уже фиксят.",
"Коллега задеплоил без тестов.",
"DNS-кеш.",
"Виноват рефакторинг.",
"Это фича, а не баг.",
]
print(random.choice(excuses))
Bash-версия
#!/bin/bash
excuses=(
"Это баг в библиотеке, уже фиксят."
"Коллега задеплоил без тестов."
"DNS-кеш."
)
echo ${excuses[$RANDOM % ${#excuses[@]}]}
Какое ваше любимое "техническое" оправдание?
P.S. Если скрипт выдаёт одно и то же, проверьте $RANDOM. Или вините кеш.
🌐 @helcode | #python #bash
👍2
Сколько стоит ваш час? Экономика автоматизации
📖 Миф: «Написание скриптов не окупается».
👉 Реальность: выгода — не только в скорости. Вот что вы упускаете:
1. Когнитивная нагрузка — не нужно запоминать шаги.
2. Цена ошибки — один баг в ручном процессе может стоить дорого.
3. Масштабируемость — ручная работа = линейные затраты, скрипт = 0.
⚙️ Пример:
Скрипт для бэкапа (2 часа на разработку) vs ручное копирование (1 час в день).
Через неделю — экономия 5 часов!
Сколько времени тратите на рутину? Давайте прикинем выгоду от автоматизации.
🌐 @helcode
📖 Миф: «Написание скриптов не окупается».
👉 Реальность: выгода — не только в скорости. Вот что вы упускаете:
1. Когнитивная нагрузка — не нужно запоминать шаги.
2. Цена ошибки — один баг в ручном процессе может стоить дорого.
3. Масштабируемость — ручная работа = линейные затраты, скрипт = 0.
⚙️ Пример:
Скрипт для бэкапа (2 часа на разработку) vs ручное копирование (1 час в день).
Через неделю — экономия 5 часов!
Сколько времени тратите на рутину? Давайте прикинем выгоду от автоматизации.
🌐 @helcode
👍7💯1
Идеальный скрипт: 6 обязательных элементов
Хотите, чтобы скрипты жили долго и не ломались? Добавьте:
1. Метаинформацию (автор, версия) — иначе через месяц забудете, зачем это.
2. Обработку ошибок —
3. Логирование —
4. Параметры —
5. Документацию — хотя бы комментарии.
6. Тесты — хотя бы «сухой прогон».
Шаблон для Bash:
Какой элемент кажется вам самым сложным?
🌐 @helcode | #bash
Хотите, чтобы скрипты жили долго и не ломались? Добавьте:
1. Метаинформацию (автор, версия) — иначе через месяц забудете, зачем это.
2. Обработку ошибок —
if ! command; then exit 1; fi. 3. Логирование —
logger -t "скрипт начался". 4. Параметры —
THRESHOLD_DAYS=${1:-7}. 5. Документацию — хотя бы комментарии.
6. Тесты — хотя бы «сухой прогон».
Шаблон для Bash:
#!/bin/bash
# Автор: Вася Пупкин
# Версия: 1.1
# Назначение: Чистит логи старше N дней
LOG_DIR="/var/log"
DAYS=${1:-30} # Параметр по умолчанию
if ! find "$LOG_DIR" -name "*.log" -mtime +$DAYS -delete; then
echo "Ошибка удаления! Проверьте права." >&2
exit 1
fi
Какой элемент кажется вам самым сложным?
🌐 @helcode | #bash
👍4🔥2❤1
Скрипты или готовый софт - что выбрать?
🔧 Скрипты идеальны для:
- Нестандартных задач
- Быстрого реагирования
- Маленьких инфраструктур
⚙️ Готовый софт (Zabbix, Prometheus) для:
- Крупных систем
- Сложной аналитики
- Долгосрочного хранения данных
❗️Главное правило:
> Если скрипты закрывают ваши задачи — не усложняйте.
А вы используете скрипты или готовые системы? Делитесь в комментариях!
🌐 @helcode
🔧 Скрипты идеальны для:
- Нестандартных задач
- Быстрого реагирования
- Маленьких инфраструктур
⚙️ Готовый софт (Zabbix, Prometheus) для:
- Крупных систем
- Сложной аналитики
- Долгосрочного хранения данных
❗️Главное правило:
> Если скрипты закрывают ваши задачи — не усложняйте.
А вы используете скрипты или готовые системы? Делитесь в комментариях!
🌐 @helcode
👍3
Вредный совет: как обойти auditd?
🛡Для тестирования защиты
1. Остановка auditd:
- Защита: мониторинг статуса службы через cron.
1. Удаление правил:
- Защита: запрет
1. Перезапись логов:
- Защита: настройка
❗️Важно: эти методы — только для проверки своих систем!
🌐 @helcode | #bash
🛡Для тестирования защиты
1. Остановка auditd:
sudo systemctl stop auditd
- Защита: мониторинг статуса службы через cron.
1. Удаление правил:
sudo auditctl -D
- Защита: запрет
auditctl для обычных пользователей. 1. Перезапись логов:
echo "" > /var/log/audit/audit.log
- Защита: настройка
immutable-флагов на файлы. ❗️Важно: эти методы — только для проверки своих систем!
🌐 @helcode | #bash
👍1😁1
Как автоматизировать создание виртуальных машин?
🫸 Хватит тыкать в GUI — создаём ВМ скриптом!
Ручное создание виртуальных машин — это прошлый век.
⚙️ Автоматизируем это с помощью Vagrant и PowerShell.
Вариант 1: Vagrant (кроссплатформенная магия)
Запуск:
Вариант 2: Hyper-V + PowerShell
❔Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?
🌐 @helcode | #bash #powershell
🫸 Хватит тыкать в GUI — создаём ВМ скриптом!
Ручное создание виртуальных машин — это прошлый век.
⚙️ Автоматизируем это с помощью Vagrant и PowerShell.
Вариант 1: Vagrant (кроссплатформенная магия)
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
Запуск:
vagrant up # Создаёт и запускает ВМ
vagrant ssh # Подключается к ней
Вариант 2: Hyper-V + PowerShell
# Создаём новую ВМ
New-VM -Name "MyServer" -MemoryStartupBytes 4GB -NewVHDPath "C:\VMs\MyServer.vhdx" -NewVHDSizeBytes 50GB
Set-VMProcessor -VMName "MyServer" -Count 2
Start-VM -Name "MyServer"
❔Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?
P.S. Если Vagrant говорит «box not found», проверьте, установили ли вы бокс командой vagrant box add ubuntu/focal64
🌐 @helcode | #bash #powershell
👍1
Тренды автоматизации 2025
Что потенциально будет актуально через год?
1. Адаптивные скрипты — сами подстраиваются под нагрузку (например, масштабируют сервисы).
2. Визуальные workflow — карты процессов вместо тысяч строк кода.
3. Самодокументация — GPT, которая пишет описание для вашего кода (но стоит ли доверять?).
Пример адаптивного скрипта на Python:
Нужно ли учить AI-инструменты для автоматизации? Или старый добрый Bash рулит?
🌐 @helcode | #python
Что потенциально будет актуально через год?
1. Адаптивные скрипты — сами подстраиваются под нагрузку (например, масштабируют сервисы).
2. Визуальные workflow — карты процессов вместо тысяч строк кода.
3. Самодокументация — GPT, которая пишет описание для вашего кода (но стоит ли доверять?).
Пример адаптивного скрипта на Python:
# Мониторит CPU и решает, добавлять ли ресурсы
if current_cpu > threshold:
scale_up(servers=1)
log("Выполнено масштабирование из-за нагрузки")
Нужно ли учить AI-инструменты для автоматизации? Или старый добрый Bash рулит?
🌐 @helcode | #python
👌1
Как работать с API в PowerShell?
Отправляем запросы, не выходя из консоли!
PowerShell предлагает супер-удобные cmdlets для работы с REST API.
Базовый пример: GET-запрос
Отправка данных (POST)
💬 Обсуждение:
С какими API вам чаще всего приходится работать? Расскажите о своих кейсах!
P.S.Если Invoke-RestMethod тормозит, попробуйте добавить -DisableKeepAlive
🌐 @helcode | #powershell
Отправляем запросы, не выходя из консоли!
PowerShell предлагает супер-удобные cmdlets для работы с REST API.
Базовый пример: GET-запрос
# Простой запрос
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat"
$response.name
# С заголовками
$headers = @{
"Authorization" = "token YOUR_TOKEN"
}
$response = Invoke-RestMethod -Uri "https://api.github.com/user/repos" -Headers $headers
Отправка данных (POST)
$body = @{
name = "NewRepo"
description = "Created via PowerShell"
} | ConvertTo-Json
Invoke-RestMethod -Uri "https://api.github.com/user/repos" -Method Post -Body $body -Headers $headers -ContentType "application/json"💬 Обсуждение:
С какими API вам чаще всего приходится работать? Расскажите о своих кейсах!
P.S.
🌐 @helcode | #powershell
👍1
Коллеги, всех приветствую!
Думаю, многим знакома рутина: чтобы протестировать новую фичу или настроить базу данных, нужны тонны правдоподобных, но фейковых данных. Делать вручную — долго и скучно.
В новой статье на Хабре разбираем, как автоматизировать этот процесс с помощью библиотеки Faker. Это настоящая фабрика по производству любых данных: от имён и email до полных адресов, номеров кредитных карт и даже текстов Lorem Ipsum.
В материале вас ждёт:
✅ Базовое использование — генерация самых популярных типов данных.
✅ Работа с провайдерами: как создавать специфичные данные (для РФ, например).
✅ Создание собственных провайдеров под уникальные задачи.
https://habr.com/ru/articles/940056/
Думаю, многим знакома рутина: чтобы протестировать новую фичу или настроить базу данных, нужны тонны правдоподобных, но фейковых данных. Делать вручную — долго и скучно.
В новой статье на Хабре разбираем, как автоматизировать этот процесс с помощью библиотеки Faker. Это настоящая фабрика по производству любых данных: от имён и email до полных адресов, номеров кредитных карт и даже текстов Lorem Ipsum.
В материале вас ждёт:
✅ Базовое использование — генерация самых популярных типов данных.
✅ Работа с провайдерами: как создавать специфичные данные (для РФ, например).
✅ Создание собственных провайдеров под уникальные задачи.
https://habr.com/ru/articles/940056/
Хабр
Генерация тестовых данных на Python: руководство по библиотеке Faker
Привет, Хабр! Думаю, многие сталкивались с необходимостью генерации тысячи пользователей. Вручную - не вариант, слишком долго. В данной статье разберу библиотеку Faker. Это генератор реалистичных...
👍4
Самая частая ошибка в cron: «Команда не найдена»
Знакомая история? Скрипт отлично runs из терминала, но в
Всё потому, что
Решение простое и железное: ВСЕГДА использовать полные пути!
❌
✅
❌
✅
Найти полный путь к любой команде можно через
Вывод: полные пути — это маст-хэв для любого крона.
🌐 @helcode | #linux #cron #ошибки #администрирование
Знакомая история? Скрипт отлично runs из терминала, но в
cron -е падает с ошибкой command not found.Всё потому, что
cron работает в минимальном окружении! У него своя, очень скудная переменная PATH (часто просто /usr/bin:/bin). Он не видит ваши $HOME/.bashrc и любимые ~/bin.Решение простое и железное: ВСЕГДА использовать полные пути!
❌
* * * * * myscript.sh✅
* * * * * /home/user/scripts/myscript.sh❌
* * * * * python3 script.py ✅
* * * * * /usr/bin/python3 /path/to/script.pyНайти полный путь к любой команде можно через
which или whereis: which python3 whereis nodeВывод: полные пути — это маст-хэв для любого крона.
🌐 @helcode | #linux #cron #ошибки #администрирование
❤4👍2
Pester: как писать тесты для скриптов?
Ваши скрипты заслуживают тестов!
🛠 Pester — это фреймворк для тестирования PowerShell-кода. Вот как начать.
Простейший тест
Запуск тестов
Реальный пример: тестирование функции
Пишете ли вы тесты для своих скриптов? Если да, поделитесь лучшими практиками!
🌐 @helcode | #powershell #windows #тест
Ваши скрипты заслуживают тестов!
🛠 Pester — это фреймворк для тестирования PowerShell-кода. Вот как начать.
Простейший тест
# Создаём файл MyScript.Tests.ps1
Describe "Проверка функций моего модуля" {
It "Сложение 2+2 должно возвращать 4" {
(2 + 2) | Should -Be 4
}
It "Функция Get-Hello возвращает приветствие" {
Get-Hello -Name "Alice" | Should -Be "Hello, Alice"
}
}
Запуск тестов
Invoke-Pester -Path .\MyScript.Tests.ps1
Реальный пример: тестирование функции
# BeforeAll {
# . .\MyScript.ps1 # Подгружаем тестируемый скрипт
# }
Describe "Get-Hello" {
It "Должна возвращать правильное приветствие" {
Get-Hello -Name "World" | Should -Be "Hello, World"
}
}Пишете ли вы тесты для своих скриптов? Если да, поделитесь лучшими практиками!
P.S. Если тесты не запускаются, проверьте, установлен ли Pester: Install-Module -Name Pester -Force
🌐 @helcode | #powershell #windows #тест