Извлечение из сообщения в PowerShell - PullRequest
0 голосов
/ 26 апреля 2018

Может быть, я поступаю неправильно, но это то, что у меня есть и что я получаю:

Get-WinEvent -FilterHashtable @{logname='security'; id=4663;} | ?{$_.message -match "DELETE" -And $_.message -match "C:\\Shares\\Share" -And $_.message -NotMatch ".tmp|~\\$"} | Select -expand Message

Я получаю этот вывод:

Subject:
        Security ID:            S-1-5-21-
        Account Name:           name
        Account Domain:         domain
        Logon ID:               0x9CD04EC

Object:
        Object Server:          Security
        Object Type:            File
        Object Name:            C:\Shares\
        Handle ID:              0x5504
        Resource Attributes:    S:AI

Process Information:
        Process ID:             0x4
        Process Name:

Access Request Information:
        Accesses:               DELETE

        Access Mask:            0x10000
An attempt was made to access an object.

Есть ли способ просто извлечь идентификатор логина и имя объекта?

1 Ответ

0 голосов
/ 26 апреля 2018

Допустим, вы установили значение отдельной записи для переменной $message. Значение будет одной строкой, содержащей несколько строк.

Вам нужно искать содержимое строки, и для этого есть разные способы. Вот два метода:

Труба до findstr:

& "echo" $message | findstr /im /C:"Logon ID"
& "echo" $message | findstr /im /C:"Object Name"

Разделить на NewLine, передать до foreach и использовать регулярное выражение:

$message -split [Environment]::NewLine | foreach{if ($_ -match "Logon ID|Object Name") {$_}}

Обратите внимание, что это даст вам вывод, который выглядит примерно так:

Logon ID:       0x9CD04EC
Object Name:        C:\Shares\

Вам все равно нужно будет поработать, чтобы отделить значения от этих строк. Что-то вроде:

$logonID = & "echo" $message | findstr /im /C:"Logon ID"
($logonID -split "      ")[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...