Делегаты PowerShell и.NET (трассировка событий для Windows)

Я пытаюсь использовать библиотеку krabsetw ( https://github.com/Microsoft/krabsetw) из скрипта PowerShell. Сценарий может создать сеанс и правильно его настроить, но не может использовать какие-либо события.

Автор сценария:

Function Parse-ETW()
{
    Param([O365.Security.ETW.IEventRecord] $record)
    Write-Host $record.Id
}

$Trace = New-Object -TypeName O365.Security.ETW.UserTrace -ArgumentList @("Session-$([System.Guid]::NewGuid())") 
$Provider = New-Object -TypeName O365.Security.ETW.Provider -ArgumentList @([System.Guid]::Parse("{1C95126E-7EEA-49A9-A3FE-A378B03DDB4D}"))
$Provider.Any = [O365.Security.ETW.Provider]::AllBitsSet

$Job = Register-ObjectEvent -InputObject $Provider -EventName "OnEvent" -Action {Parse-ETW -record $EventArgs}

$Trace.Enable($Provider)
$Trace.Start()

Я также попробую "простую" форму действий:

Register-ObjectEvent -InputObject $Provider -EventName "OnEvent" -Action {Write-Host "Event arrived"}

Также нет результатов. Есть идеи, как заставить это работать?

C# подпись метода, потребляющего события:

public delegate void IEventRecordDelegate(IEventRecord record);

Рабочий код C#

using System;
using O365.Security.ETW;

namespace ManagedExamples
{
    public static class DnsTrace
    {
        public static void Main()
        {
            var trace = new UserTrace();
            var dnsProvider = new Provider(Guid.Parse("{1C95126E-7EEA-49A9-A3FE-A378B03DDB4D}"));

            dnsProvider.Any = Provider.AllBitsSet;
            dnsProvider.OnEvent += (record) =>
            {
                Console.WriteLine("Event " + record.Id + " (" + record.Name + ") received.");

            };
            trace.Enable(dnsProvider);
            trace.Start();
        }
    }
}

0 ответов

Другие вопросы по тегам