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


about_Logging_Non-Windows

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

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

Подробное описание

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

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

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

  • В Linux PowerShell записывает журнал в системный журнал , который может пересылать на сервер системного журнала . Дополнительные сведения см. на 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, размещенный в каталоге PowerShell$PSHOME. Если этот файл конфигурации не существует, необходимо создать его, чтобы изменить параметры по умолчанию. Каждая установка 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.
  • LogLevel
    • Значения: Always, CriticalErrorWarningInformationalVerboseDebug
    • Описание. Укажите одно значение. Значения перечислены в порядке детализации. Выбранное значение включает и все значения перед ним. Значение по умолчанию — Informational.
  • LogKeywords
    • Значения: Runspace, , ProtocolPipelineTransportHostCmdletsSerializerSessionManagedPlugin
    • Описание. Ключевые слова позволяют ограничить ведение журнала определенными компонентами в PowerShell. По умолчанию все ключевые слова включены и изменяются только для специализированного устранения неполадок.
  • PowerShellPolicies
    • Описание. Параметр PowerShellPolicies содержит параметры ModuleLogging, ProtectedEventLogging и ScriptBlockLogging. Дополнительные сведения см. в разделе "Общие параметры конфигурации".

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

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

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

journalctl --grep powershell

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

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

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

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

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

  • В дистрибутивах на основе 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. Задайте разрешения доступа: корневой каталог имеет чтение и запись, пользователи считывают.

      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. Консольное приложение предназначено для более старого журнала на основе системного журнала, которое предопределяет единую систему ведения журнала.

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

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

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

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

См. также