IBCOURSES / СПРАВОЧНИК ИБ

PowerShell 7: 4104 — Script Block Logging

К ответу ↓

При включённом Script Block Logging PowerShell пишет содержимое обрабатываемых script blocks. Для PowerShell 7 используется PowerShellCore/Operational; Windows PowerShell 5.1 рассматривается отдельно.

Например
Материалов с пояснениями: 94 · Записей реестров: 11 678

Уточнить поиск

События и журналы

Найдено: 84
Инструкция по проверке

PowerShell 7: 4104 — Script Block Logging

При включённом Script Block Logging PowerShell пишет содержимое обрабатываемых script blocks. Для PowerShell 7 используется PowerShellCore/Operational; Windows PowerShell 5.1 рассматривается отдельно.

Условия и ветка PowerShell

Карточка относится к PowerShell 7 и PowerShellCore/Operational, а не к Windows PowerShell 5.1. Нужны зарегистрированный provider и действовавшее Script Block Logging. Официальный manifest тега v7.5.0 подтверждает Provider PowerShellCore, Event 4104 версии 1 и имена полей. Регистрация manifest и включение журналирования изменяют систему и не включены в читающие примеры.

Отбор без локализованного Message

Запрос использует PowerShellCore, точный канал, 4104 и UTC-окно. EventData извлекается по Name. Сохраняйте MessageNumber, MessageTotal, ScriptBlockId, ScriptBlockText и Path, когда они доступны. Если текст разбит на части, проверяйте полноту и порядок до интерпретации. Не объединяйте части разных блоков по одному времени; namespace и точный источник остаются частью ключа.

Пример записи

В примере один блок Get-Date: MessageNumber=1 и MessageTotal=1, Path пуст. Пример содержит условные значения полей из манифеста. ScriptBlockText показывает обработанное содержимое, но не результат каждого оператора. Пустой Path не позволяет восстановить путь файла по догадке. ScriptBlockId — идентификатор блока, не готовый идентификатор человека или входа.

Что можно заключить

Наличие текста полезно для анализа намерения команд, но не доказывает, что все ветки выполнились и нужный результат получен. Разделяйте содержимое, факт обработки, вызов и прикладное последствие. При передаче из сборщика проверьте, не урезан ли текст и не потеряны ли номера частей. Отображение одного фрагмента как целого скрипта способно изменить смысл проверки.

Следующий шаг

Сопоставьте период и узел с процессной телеметрией PowerShell, сеансами и журналом приложения. Технический процесс или служебная identity не устанавливают оператора без отдельной связи. Для вывода о результате найдите независимое свидетельство изменения или обращения. Сохраните исходные части и параметры отбора, а подтверждённые и предполагаемые звенья цепочки пометьте отдельно.

Если запись не найдена

Проверьте ветку PowerShell и канал, время, регистрацию provider, действовавшие настройки и сохранность Operational. Пример 5.1 с другим provider не подменяет отсутствие 7. Частичная доставка может оставить блок неполным. Включение Script Block Logging сейчас не создаст исторических записей. Зафиксируйте, отсутствует ли весь источник, нужный ID или только часть блока, и запросите соответствующие данные.

Поля и область применения

Исходное полеСмысл и ограничения
System/Provider / ChannelPowerShellCore и PowerShellCore/Operational; не журнал Windows PowerShell5.1.
MessageNumber / MessageTotalНомер и количество частей по manifest; проверить полноту до сборки текста.
ScriptBlockIdИдентификатор script block, не готовый идентификатор человека.
ScriptBlockTextСодержимое обрабатываемого блока; не доказательство успешности всех его действий.
PathДоступный путь скрипта; при отсутствии не достраивать из командной строки.
ETW provider GUID{f90714a8-5509-434a-bf6d-b1624c8a19a2}, сверено по manifest.

Примеры записей

Данные в примерах условные. Состав полей зависит от версии и настроек источника.

PowerShellCore 4104 v1: один script block

Фрагмент журнала. Сокращённый XML-пример по официальному manifest PowerShellv7.5.0. Пустой Path показывает отсутствие пути в событии. Это не событие Windows PowerShell5.1.

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System><Provider Name="PowerShellCore"/><EventID>4104</EventID><Version>1</Version><TimeCreated SystemTime="2026-11-03T09:30:00.000Z"/><EventRecordID>4101</EventRecordID><Channel>PowerShellCore/Operational</Channel><Computer>win-lab-01.example.test</Computer></System>
  <EventData>
    <Data Name="MessageNumber">1</Data>
    <Data Name="MessageTotal">1</Data>
    <Data Name="ScriptBlockText">Get-Date</Data>
    <Data Name="ScriptBlockId">11111111-1111-4111-8111-111111111111</Data>
    <Data Name="Path"></Data>
  </EventData>
</Event>

Команды и способы проверки

Укажите свой узел, путь к журналу и временной интервал. Требуемая среда указана рядом с командой.

PowerShell: только чтение локального журнала. Заменить учебное UTC-окно и выбрать нужный узел.

$referenceStartUtc = [DateTimeOffset]::Parse('2026-11-03T09:00:00Z').UtcDateTime
$referenceEndUtc = [DateTimeOffset]::Parse('2026-11-03T11:00:00Z').UtcDateTime
Get-WinEvent -FilterHashtable @{LogName='PowerShellCore/Operational'; ProviderName='PowerShellCore'; Id=4104; StartTime=$referenceStartUtc; EndTime=$referenceEndUtc} |
ForEach-Object {
  $referenceEvent = $_
  [xml]$referenceXml = $referenceEvent.ToXml()
  $referenceNs = [System.Xml.XmlNamespaceManager]::new($referenceXml.NameTable)
  $referenceNs.AddNamespace('e','http://schemas.microsoft.com/win/2004/08/events/event')
  $referenceData = @{}
  foreach ($referenceNode in $referenceXml.SelectNodes('/e:Event/e:EventData/e:Data',$referenceNs)) {
    $referenceData[$referenceNode.GetAttribute('Name')] = $referenceNode.InnerText
  }
  [pscustomobject]@{
    TimeCreatedUtc=$referenceEvent.TimeCreated.ToUniversalTime().ToString('o')
    Computer=$referenceEvent.MachineName
    Provider=$referenceEvent.ProviderName
    EventId=$referenceEvent.Id
    RecordId=$referenceEvent.RecordId
    Data=[pscustomobject]$referenceData
  }
}

Первоисточники

Запись script block не доказывает успешного завершения всех операций внутри скрипта.

Связанные материалы

Как пользоваться техническим справочником

Найдите порт, код ошибки, событие или источник журнала. Уточните протокол и систему, затем сверяйте значение, поля, примеры и первоисточники. Назначение порта не определяет фактическую службу, а одна запись не доказывает инцидент.

Материалы по разделам

События и журналы

Два ответа рядом

Сравнение источников

Сравнение показывает различия. События и поля разных систем не считаются эквивалентными.

Выберите службу

В списке — службы, доступные с текущими условиями. Число рядом — количество записей портов, а не программ на вашем узле.

Как искать в справочнике

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

  1. Введите номер, код, имя или фрагмент записи. Для портов можно использовать список: 80, 443, 8000–8010.
  2. Уточните поиск фильтрами. Все условия действуют одновременно. Числа в списках показывают, сколько материалов останется при выборе варианта.
  3. Службу выбирайте из каталога: поиск внутри списка помогает найти название, а кнопка «Выбрать» применяет его.
  4. Убирайте отдельные условия кнопкой × рядом с фильтром. «Сбросить фильтры» сохраняет текст поиска и текущий раздел.
  5. В карточке сверьте источник, версию и условия регистрации, затем откройте поля, примеры и первоисточник.

/ — перейти к поиску. Прямые ссылки открывают выбранную карточку в этом же справочнике.

Назначения портов и коды приведены по официальным реестрам. Версии, условия регистрации и ссылки на документацию указаны в карточках.

Избранное и недавние материалы хранятся в этом браузере. Запрос и фильтры сохраняются при возврате к выдаче и обновлении вкладки. Поиск работает локально.

Что есть в справочнике

От вопроса к свидетельствам: кто вошёл, что запустил, к каким данным обратился, что изменил и где искать следы.

Выберите область, чтобы посмотреть доступные источники и перейти к материалам.

Уточнить или исправить ответ

Скопируйте сообщение и отправьте его на mail@ibcourses.ru.