Powershell - мониторинг новых процессов с помощью ExecutionPath и CommandLine - PullRequest
0 голосов
/ 21 февраля 2020

Интересно, можете ли вы помочь мне со сценарием (согласно заголовку)

Так что я поигрался с кодом ниже:

Register-CimIndicationEvent -ClassName Win32_ProcessStartTrace -SourceIdentifier "ProcessStarted"

Вывод с Get-Event возвращает то, что мне нужно:

Get-Event | select timegenerated, @{N='ProcessName'; E = {$_.sourceeventargs.newevent.processname}}
TimeGenerated         ProcessName           
-------------         -----------           
21-Feb-20 12:58:29 PM UpdateTrustedSites.exe
21-Feb-20 12:58:31 PM backgroundTaskHost.exe
21-Feb-20 12:58:33 PM pwrgate.exe           
21-Feb-20 12:58:33 PM chrome.exe   

Но я понятия не имею, как объединить его с win32_Process (Get-WMIObject win32_Process) .CommandLine и .ExecutablePath)

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 21 февраля 2020

Register-CimIndicationEvent

Командлет Register-CimIndicationEvent подписывается на указания, используя имя класса указания или выражение запроса. Используйте параметр SourceIdentifier, чтобы дать имя подписке

. И используемый параметр SourceIdentifier Win32_ProcessStartTrace.

Win32_ProcessStartTrace Он имеет только следующие свойства вы можете получить доступ к

[AMENDMENT]
class Win32_ProcessStartTrace : Win32_ProcessTrace
{
  uint8  SECURITY_DESCRIPTOR[];
  uint64 TIME_CREATED;
  uint32 ProcessID;
  uint32 ParentProcessID;
  uint8  Sid[];
  string ProcessName;
  uint32 SessionID;
};

Тем не менее, если вы хотите найти Команду и Путь для процесса, вам придется искать информацию о процессе отдельно для каждого процесса.

foreach($event in Get-Event) {
    $TimeGen = $event.timegenerated
    $ProcessName = $event.sourceeventargs.newevent.processname
    $Process = Get-WmiObject Win32_Process -Filter "Name LIKE '$ProcessName'" | select -First 1
    $ProcessCMD = ($Process | select CommandLine).CommandLine
    $processPath = ($Process | select ExecutablePath).ExecutablePath
    $out = [pscustomobject]@{
        Time=$TimeGen
        Name=$ProcessName
        Path=$processPath
        Command=$ProcessCMD
    }
    $out
}

Вы можете объединить параметр $out с помощью массива или хеш-таблицы и запросить их, если вам нужно.

...