Поделиться через


about_Logging_Non-Windows (о ведении журналов в средах, отличных от Windows)

Краткое описание

PowerShell регистрирует внутренние операции движка, поставщиков и командлетов.

Длинное описание

PowerShell регистрирует сведения об операциях, таких как запуск и остановка движка и запуск и остановка поставщиков. Он также записывает сведения о командах PowerShell.

Сведения о ведении журнала в Windows PowerShell 5.1 см. в about_Logging.

Расположение журналов PowerShell зависит от целевой платформы.

  • В Linux PowerShell ведёт журналы в системный журнал systemd , который может пересылаться на syslog-сервер . Дополнительные сведения см. на страницах man в вашем дистрибутиве Linux.
  • В macOS используется единая система ведения журнала Apple. Дополнительные сведения см. в документации разработчика Apple по ведению журнала.

PowerShell поддерживает настройку двух категорий ведения журнала:

  • Ведение журнала модулей— запись событий выполнения конвейера для членов указанных модулей. Ведение журнала модулей должно быть включено как для сеанса, так и для определенных модулей. Дополнительные сведения о настройке этого журнала см. в about_PowerShell_Config.

    Если ведение журнала модулей включено с помощью конфигурации, вы можете включить и отключить ведение журнала для определенных модулей в сеансе, задав значение свойства LogPipelineExecutionDetails свойству модуля.

    Например, чтобы включить ведение журнала для модуля PSReadLine:

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Ведение журнала блоков скриптов — записывайте обработку команд, блоков скриптов, функций и скриптов, вызываемых интерактивным способом или с помощью автоматизации.

    При включении ведения журнала блоков скриптов PowerShell записывает содержимое всех блоков скриптов, которые он обрабатывает. После включения все новые сеансы PowerShell регистрируют эти сведения.

    Заметка

    Рекомендуется включить ведение журнала защищенных событий при использовании ведения журнала блоков скриптов для других целей диагностики. Дополнительные сведения см. в about_PowerShell_Config.

Настройка ведения журнала в Linux или macOS

Конфигурация для ведения журнала в Linux и macOS хранится в файле powershell.config.json. Файл powershell.config.json — это форматированный файл JSON, который находится в каталоге $PSHOME PowerShell. Если этот файл конфигурации не существует, необходимо создать его, чтобы изменить параметры по умолчанию. Каждая установка PowerShell использует собственную копию этого файла.

По умолчанию PowerShell позволяет Informational ведения журнала в канале Operational. Можно изменить конфигурацию, если требуется дополнительный вывод журнала, например подробный или включение аналитического журнала.

Следующий код является примером конфигурации:

{
    "ModuleLogging": {
        "EnableModuleLogging": false,
        "ModuleNames": [
            "PSReadLine",
            "PowerShellGet"
        ]
    },
    "ScriptBlockLogging": {
        "EnableScriptBlockInvocationLogging": true,
        "EnableScriptBlockLogging": true
    },
    "LogLevel": "verbose"
}

Ниже приведен список свойств для настройки ведения журнала PowerShell. Если свойство не указано в конфигурации, PowerShell использует значение по умолчанию.

  • LogIdentity
    • Значения: <string name>, powershell
    • Описание: имя, используемое при ведении системных журналов. Идентификатор по умолчанию — powershell. Это значение можно использовать для определения разницы между двумя экземплярами установки PowerShell, такими как выпуск и бета-версия. Это значение также используется для перенаправления выходных данных журнала в отдельный файл.
  • LogChannels
    • Значения: Operational, Analytic
    • Описание: каналы, которые нужно включить. Разделите значения с запятой при указании нескольких значений. Значение по умолчанию — Operational.
  • Уровень логирования
    • Значения: Always, Critical, Error, Warning, Informational, Verbose, Debug
    • Описание. Укажите одно значение. Значения перечислены в порядке увеличения многословности. Выбранное значение активирует себя и все значения перед ним. Значение по умолчанию — Informational.
  • ЛогКлючевыеСлова
    • Значения: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, Serializer, Session, ManagedPlugin
    • Описание. Ключевые слова позволяют ограничить ведение журнала определенными компонентами в PowerShell. По умолчанию все ключевые слова включены и изменяются только для специализированного устранения неполадок.
  • PowerShellPolicies
    • Описание. Параметр PowerShellPolicies содержит параметры ModuleLogging, ProtectedEventLoggingи ScriptBlockLogging. Дополнительные сведения см. в разделе Общие параметры конфигурации.

Просмотр данных журнала PowerShell в журнале в Linux

PowerShell записывает данные в системный журнал systemd с помощью демона journald на дистрибутивах Linux, таких как Ubuntu и Red Hat Enterprise Linux (RHEL).

Демон journald хранит сообщения журнала в двоичном формате. Используйте утилиту journalctl, чтобы запросить журнал для записей PowerShell.

journalctl --grep powershell

Демон journald может пересылать сообщения журнала на сервер по протоколу системного журнала (syslog). Включите параметр ForwardToSysLog в файле конфигурации /etc/systemd/journald.confжурнала, если вы хотите использовать логирование syslog в системе Linux. Это конфигурация по умолчанию для многих дистрибутивов Linux.

Просмотр данных журнала PowerShell в системном журнале в Linux

Используйте диспетчер пакетов для дистрибутива Linux, чтобы установить сервер системного журнала , например rsyslog, если вы хотите использовать ведение журнала системных журналов в системе Linux. Некоторые дистрибутивы Linux, такие как предустановка Ubuntu rsyslog.

Протокол системного журнала сохраняет сообщения журнала в стандартном текстовом формате. Вы можете использовать любую программу обработки текста для запроса или просмотра содержимого системного журнала.

По умолчанию syslog записывает журнальные сообщения в следующий путь:

  • В дистрибутивах на основе Debian, включая Ubuntu: /var/log/syslog
  • В дистрибутивах на основе RHEL: /var/log/messages

В следующем примере команда cat используется для запроса системного журнала PowerShell записей в Ubuntu.

cat /var/log/syslog | grep -i powershell

Формат сообщения системного журнала

Сообщения системного журнала имеют следующий формат:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP — дата и время создания записи журнала.
  • MACHINENAME — имя системы, в которой был создан журнал.
  • PID — идентификатор процесса, написавшего запись журнала.
  • COMMITID — идентификатор или тег коммита git, используемый для создания сборки.
  • TID — идентификатор потока, записавшего запись журнала.
  • CID — шестнадцатеричный идентификатор канала записи журнала.
    • 0x10 = операционный
    • 0x11 = Аналитика
  • EVENTID — идентификатор события записи журнала.
  • TASK — идентификатор задачи для записи события
  • OPCODE — код opcode для записи события
  • LEVEL — уровень логов для записи события
  • MESSAGE — сообщение, связанное с записью события

EVENTID, TASK, OPCODEи LEVEL являются теми же значениями, что и при ведении журнала событий Windows.

Запись сообщения журнала PowerShell в отдельный файл

Кроме того, можно перенаправить записи журнала PowerShell в отдельный файл. Когда записи журнала PowerShell перенаправляются в отдельный файл, они больше не записываются в файл системного журнала по умолчанию.

Чтобы настроить запись записей журнала PowerShell в Ubuntu в файл журнала с именем powershell.log, выполните следующие шаги.

  1. Создайте файл конфигурации (conf) для конфигурации журнала PowerShell в каталоге /etc/rsyslog.d с помощью текстового редактора файлов, например nano. Добавьте к имени файла номер, меньший, чем по умолчанию. Например, 40-powershell.conf, где значение по умолчанию 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Добавьте следующие сведения в файл 40-powershell.conf:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Убедитесь, что /etc/rsyslog.conf содержит инструкцию include для нового файла. У него может быть общая формулировка, включающая это, например:

    $IncludeConfig /etc/rsyslog.d/*.conf
    

    Если это не так, необходимо добавить инструкцию include вручную.

  4. Убедитесь, что атрибуты и разрешения заданы соответствующим образом.

    ls -l /etc/rsyslog.d/40-powershell.conf
    
    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    

    Если файл 40-powershell.conf имеет разные права владения или разрешения, выполните следующие действия.

    1. Задайте для владельца корневой.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Задайте разрешения доступа: root имеет права на чтение и запись, пользователи имеют права на чтение.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Перезапустите службу rsyslog.

    sudo systemctl restart rsyslog.service
    
  6. Запустите pwsh, чтобы создать сведения PowerShell для журнала.

    pwsh
    

    Заметка

    Файл /var/log/powershell.log не создается, пока служба rsyslog не будет перезапущена, и PowerShell создает сведения для журнала.

  7. Запросите файл powershell.log, чтобы убедиться, что данные PowerShell записываются в новый файл.

    cat /var/log/powershell.log
    

Просмотр данных журнала PowerShell в macOS

PowerShell записывает журналы в единую систему логирования Apple — функцию macOS, которая позволяет собирать и хранить журналы системных и прикладных программ в одном централизованном месте.

Единая система ведения журнала Apple хранит сообщения журнала в двоичном формате. Необходимо использовать средство log для запроса единой системы ведения журнала для событий журнала PowerShell. События журнала PowerShell не отображаются в приложении консоли в macOS. Консольное приложение предназначено для более старой системы ведения журналов на основе syslog, которая предшествует единой системе ведения журналов.

Просмотр данных журнала PowerShell из командной строки в macOS

Чтобы просмотреть данные журнала PowerShell из командной строки в macOS, используйте команду log в терминале или другом приложении узла оболочки. Эти команды можно запускать из PowerShell, Z Shellили Bash.

В следующем примере команда log используется для отображения данных журнала в системе в режиме реального времени. Параметр процесса фильтрует данные журнала только для процесса . Если запущено несколько экземпляров , параметр процесса также может принимать идентификатор процесса в качестве значения. Параметр уровня отображает сообщения на указанном уровне и ниже.

log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info

Для экспорта элементов журнала можно использовать команду log show. Команда log show предоставляет параметры экспорта последних N элементов, элементов с заданного времени или элементов в течение заданного периода времени.

Например, следующая команда экспортирует элементы с 9am on April 5, 2022:

log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"

Дополнительные сведения можно получить, запустив log show --help с целью просмотра справки для команды log show.

Вы также можете выводить данные журнала в формате JSON, что позволяет преобразовать данные события в объекты PowerShell. Следующий пример выводит события в формате JSON. Командлет ConvertFrom-Json используется для преобразования данных JSON в объекты PowerShell, которые хранятся в переменной $logRecord.

log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
    ConvertFrom-Json | Set-Variable logRecord

Вы также можете рассмотреть возможность сохранения журналов в более безопасном месте, таком как Система управления информацией и событиями безопасности (SIEM) агрегатор. С помощью Microsoft Defender для облачных приложений можно настроить SIEM в Azure. Дополнительные сведения см. в интеграции с общей SIEM.

Режимы и уровни данных журнала PowerShell в macOS

По умолчанию подсистема PowerShell записывает сообщения уровня информации в память (режим), а сообщения по умолчанию - на диск (сохраняемость) в macOS. Это поведение можно изменить, чтобы включить другой режим и уровень ведения журнала с помощью команды log config.

В следующем примере включается ведение журнала на уровне сведений и сохраняемость подсистемы PowerShell:

sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info

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

sudo log config --subsystem com.microsoft.powershell --reset

См. также

  • Сведения системного журнала Linux и rsyslog.conf см. на локальных страницах man компьютера Linux.
  • Сведения о журнала macOS см. в документации разработчика Apple по ведению журнала
  • Для получения сведений о Windows см. about_Logging_Windows
  • Общая интеграция SIEM