От 10.105.1.53:62186 инициировано соединение к 81.56.69.25:33060, характерное для удаленного администрирования MySQL Extended|MySQL Database Extended Interface	Ошибка парсинга
В домене epk.local зафиксированы неуспешные попытки аутентификации под учетной записью w-iqk-rtk22797\epk_local с хоста w-iqk-rtk22797	Обработанные данные: Domain: epk.local, Account: w-iqk-rtk22797, Host: w-iqk-rtk22797
Зафиксирован запуск процесса psexesvc.exe на хосте mm1881.sberins.ru . Полный путь к файлу: C:\Windows\PSEXESVC.exepsexesvc.exe. Запуск данного процесса свидетельствует об использовании средств RAT на хосте. Лог получен от устройства mm1881.sberins.ru вендор/продукт: kaspersky/security_center	Ошибка парсинга
Средствами Kaspersky Secure Mail Gateway была обнаружена сигнатура HEUR:Trojan.Script.Generic при проверке вложения Message из письма от <PRESIDIO_ANONYMIZED_EMAIL_ADDRESS> к <PRESIDIO_ANONYMIZED_EMAIL_ADDRESS>	Обработанные данные: Action: HEUR:Trojan.Script.Generic, EmailFrom: <PRESIDIO_ANONYMIZED_EMAIL_ADDRESS>, EmailTo: <PRESIDIO_ANONYMIZED_EMAIL_ADDRESS>, Signature: HEUR:Trojan.Script.Generic
Зафиксирована успешная аутентификации с использованием явно указанных учетных данных служебной УЗ tk\app-wss-usr-test3 на хосте hq-wss-ssp-01.trcont.ru. Данная активность инициирована пользователем wss-kalininan. Процесс входа: c:\program files\yandex\yandexbrowser\application\browser.exe	Обработанные данные: Account: служебной, Host: hq-wss-ssp-01.trcont.ru., InitiatedBy: wss-kalininan., Process: c:\program
С хоста 172.22.38.61, активная УЗ: falin.as, зафиксировано обращение к домену binance.com. Полный путь, к которому было обращение: https://www.binance.com/ru/price/toncoin. Данная активность может указывать на использование ПО для майнинга криптовалюты.	Обработанные данные: Host: 172.22.38.61, ActiveAccount: falin.as, AccessedDomain: binance.com., AccessedPath: https://www.binance.com/ru/price/toncoin., Note: ПО для майнинга криптовалюты. function processMessages() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return; // Нет данных для обработки

  const dataRange = sheet.getRange("A2:A" + lastRow);
  const data = dataRange.getValues();
  const outputCol = 2; // Столбец B
  const outputs = [];

  data.forEach((row, index) => {
    const message = row[0];
    if (message) {
      try {
        const parsedData = parseMessage(message);
        const reportMessage = formatReport(parsedData);
        outputs.push([reportMessage]);
      } catch (e) {
        console.error("Ошибка парсинга: " + e.message + " в строке " + (index + 2));
        outputs.push(["Ошибка парсинга"]);
      }
    } else {
      outputs.push([""]);
    }
  });

  // Обновляем все результаты разом для повышения производительности
  sheet.getRange(2, outputCol, outputs.length, 1).setValues(outputs);
}

function parseMessage(message) {
  // Определяем тип сообщения
  if (/инициировано соединение/i.test(message)) {
    return parseConnectionInitiation(message);
  } else if (/неуспешные попытки аутентификации/i.test(message)) {
    return parseAuthFailure(message);
  } else if (/зафиксирован запуск процесса/i.test(message)) {
    return parseProcessLaunch(message);
  } else if (/обнаружена сигнатура/i.test(message)) {
    return parseSignatureDetection(message);
  } else if (/успешная аутентификации/i.test(message)) {
    return parseSuccessfulAuth(message);
  } else if (/активная УЗ/i.test(message)) {
    return parseActiveSession(message);
  } else {
    return parseGeneric(message);
  }
}

function parseConnectionInitiation(message) {
  return {
    Action: parsePattern(message, /инициировано соединение/i),
    IpSrc: parsePattern(message, /От\s+(\d{1,3}(?:\.\d{1,3}){3})/i),
    PortSrc: parsePattern(message, /От\s+\d{1,3}(?:\.\d{1,3}){3}:(\d+)/i),
    IpDst: parsePattern(message, /к\s+(\d{1,3}(?:\.\d{1,3}){3})/i),
    PortDst: parsePattern(message, /к\s+\d{1,3}(?:\.\d{1,3}){3}:(\d+)/i),
    Protocol: parsePattern(message, /характерное для\s+([^\s,]+)/i).replace(/Extended/i, "").trim()
  };
}

function parseAuthFailure(message) {
  return {
    Domain: parsePattern(message, /в домене\s+([^\s,]+)/i),
    Account: parsePattern(message, /под учетной записью\s+([^\s\\]+)/i),
    Host: parsePattern(message, /(?:с хоста|на хосте|от устройства)\s+([^\s,]+)/i),
    Action: parsePattern(message, /зафиксированы\s+([^\s]+)/i + /неуспешные попытки аутентификации/i)
  };
}

function parseProcessLaunch(message) {
  return {
    Host: parsePattern(message, /(?:на|с|от)\s+хосте\s+([^\s,]+)/i),
    Action: parsePattern(message, /зафиксирован запуск процесса/i),
    Process: parsePattern(message, /запуск процесса\s+([^\s.]+\.exe)/i),
    FilePath: parsePattern(message, /Полный путь к файлу:\s+([^\s]+)/i),
    Product: parsePattern(message, /вендор\/продукт:\s+([^\s,]+)/i)
  };
}

function parseSignatureDetection(message) {
  return {
    Action: parsePattern(message, /обнаружена сигнатура\s+([^\s,]+)/i) || "обнаружена сигнатура",
    EmailFrom: parsePattern(message, /из письма от\s+(\S+@\S+)/i),
    EmailTo: parsePattern(message, /к\s+(\S+@\S+)/i),
    Signature: parsePattern(message, /сигнатура\s+([^\s,]+)/i)
  };
}

function parseSuccessfulAuth(message) {
  return {
    Account: parsePattern(message, /учетных данных\s+([^\s\\]+)/i),
    Host: parsePattern(message, /на\s+хосте\s+([^\s,]+)/i),
    InitiatedBy: parsePattern(message, /инициирована пользователем\s+([^\s,]+)/i),
    Process: parsePattern(message, /процесс входа:\s+([^\s]+)/i)
  };
}

function parseActiveSession(message) {
  return {
    Host: parsePattern(message, /С\s+хоста\s+(\d{1,3}(?:\.\d{1,3}){3})/i),
    ActiveAccount: parsePattern(message, /активная УЗ:\s+([^\s,]+)/i),
    AccessedDomain: parsePattern(message, /обращение к домену\s+([^\s,]+)/i),
    AccessedPath: parsePattern(message, /Полный путь.*?:\s+(\S+)/i),
    Note: parsePattern(message, /может\s+указывать\s+на\s+использование\s+(.+)/i)
  };
}

function parseGeneric(message) {
  // Парсинг для сообщений, не попавших в другие категории
  return {
    RawMessage: message
  };
}

function parsePattern(message, pattern) {
  const match = message.match(pattern);
  return match ? match[1].trim() : null;
}

function formatReport(data) {
  const reportParts = [];
  for (const [key, value] of Object.entries(data)) {
    if (value) {
      reportParts.push(`${key}: ${value}`);
    }
  }
  return `Обработанные данные: ${reportParts.join(', ')}`;
} скрипт плохо работает, оптимизируй  для работы с абсолютно любыми сценариями, дано всего 4, и то он плохо работает.