0daf5e818b992c32db5675205a65ea8465cdd2b0
🛠 Универсальный скрипт для запуска команд Windows с логированием
Введение
Привет! Одна из частых задач — выполнить серию системных команд, зафиксировать результат, отловить ошибки и сохранить лог. Чтобы не делать это вручную каждый раз, я подготовил универсальный скрипт, который:
- Выполняет команды из YAML-файла
- Сохраняет логи в отдельную папку
- Показывает stdout, stderr и статус выполнения
- Удобен для расширения и автоматизации
🧩 Структура проекта
old_scripts/
├── run_commands.py # основной скрипт win
├── script.sh # основной скрипт unix
├── commands.yaml # конфигурация команд
└── logs/ # автоматически создаётся, сюда пишутся логи
📜 Файл commands.yaml
Можно добавлять любые команды. Главное — указать поле name и command.
🔍 Пример запуска
** 1. Python версия скрипта для Windows-хостов**
python run_commands.py
В консоли будет отображаться ход выполнения, а весь лог сохраняется в logs/commands_*.log.
2. Bash-версия скрипта для Linux-хостов
❗ Не забудь
chmod +x script.sh
Можно запускать из Ansible сshellилиscript.
⚙️ Настройка Ansible
Структура проекта
graylog-collector/
├── inventory/
│ └── hosts.ini
├── playbook.yml
└── roles/
└── graylog_collector/
├── tasks/
│ ├── main.yml
│ ├── windows.yml
│ └── linux.yml
├── files/
│ ├── run_commands.py
│ ├── collect_info.sh
│ └── graylog_sender.py
└── defaults/
└── main.yml
Плейбук (playbook.yml)
- name: Deploy graylog collector
hosts: all
roles:
- graylog_collector
🔍 Пример использования
Поиск в Graylog
source:server01 AND "Domain Admins"
Визуализация в Grafana
SELECT host, COUNT(*)
FROM graylog_messages
WHERE full_message LIKE '%error%'
GROUP BY host
🛠️ Кастомизация
Добавление своих команд
- Для Windows: редактируем
files/commands.yaml
- name: Check DNS
command: nslookup example.com
- Для Linux: редактируем
files/collect_info.sh
commands+=("dig example.com")
Настройка Graylog
В defaults/main.yml:
graylog_host: logs.mycompany.com
graylog_port: 12201
windows_log_dir: C:\Collector\Logs
linux_log_dir: /var/log/collector
⚠️ Решение проблем
Частые ошибки Windows
# В PowerShell:
Enable-PSRemoting -Force
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -RemoteAddress Any
Ошибки подключения Linux
# На целевой машине:
sudo systemctl restart sshd
Проблемы с Graylog
- Проверить открытость порта:
nc -vz logs.mycompany.com 12201
- Проверить GELF input в веб-интерфейсе Graylog
📈 Расширенные сценарии
Планирование регулярного сбора
Добавляем в tasks/main.yml:
- name: Schedule daily collection (Windows)
win_scheduled_task:
name: "Daily System Info"
description: "Collect system information"
actions:
- path: "python"
arguments: "C:\\Collector\\run_commands.py"
triggers:
- type: daily
start_time: "03:00"
Обработка ошибок
В скриптах добавляем обработку исключений:
try:
# выполнение команды
except Exception as e:
logging.error(f"Command failed: {str(e)}")
💡 Советы из практики
1. Фильтрация чувствительных данных:
# В run_commands.py
if "password" in command.lower():
logging.warning("Skipping potential sensitive command")
continue
2. Сжатие логов перед отправкой:
import zlib
compressed = zlib.compress(log_content.encode())
3. Маркировка хостов в Graylog:
message["_environment"] = "production"
4. Запускаем плейбук
ansible-playbook -i inventory/hosts.ini playbook.yml
Description
Languages
Python
95.1%
Shell
4.9%