Powershell Get-EventLog найти событие с соответствующей строкой в ​​своем сообщении - PullRequest
0 голосов
/ 19 февраля 2020

Мне нужно просмотреть идентификатор безопасности eventLog 4648 и найти, когда пользователь последний раз подключался к машине.

В настоящее время это мой код:

$Values = invoke-command  -ComputerName $ComputerName {Get-EventLog -LogName Security -InstanceID 4648 | Select-Object -ExpandProperty Message| ForEach-Object {if($_.Log -match "$String2"){
$_
Break }}}
$Values

Цель состояла в том, чтобы go проходить через каждый журнал до тех пор, пока не будет найден журнал, в котором сообщение имеет ранее определенное имя пользователя, а затем прекратить проходить через него. EventLog и вернуть этот журнал.

Это работает хорошо, за исключением того, что он не соответствует правильному журналу с указанной строкой.

Есть ли способ улучшить работу соответствия? Так он на самом деле находит правильный журнал с указанным пользователем?

1 Ответ

1 голос
/ 19 февраля 2020
# Fill in the regex for the userName
$userName = "userName"
$Values = @(invoke-command  -ComputerName $ComputerName { 
    Get-EventLog -LogName Security -InstanceID 4648 |  Where-Object { $_.message -match $Using:userName } | Select-Object -First 1)
}

Ваш пример выше не будет работать, поскольку message имеет тип string, поэтому он не имеет свойства Log. Поскольку мы хотим, чтобы $userName был доступен для чтения на удаленной машине, мы можем использовать синтаксис $Using:. Чтобы разорвать конвейерную «итерацию», я использую Select-Object -First 1, который возвращает первый объект, передающий предложение Where-Object.

В результате $Values указывает на коллекцию (десериализованных) объектов (используя оператор @()) типа:

 TypeName: System.Diagnostics.EventLogEntry#Security/Microsoft-Windows-Security-Auditing/4648

Это означает, что вы можете изменить параметр -First, например, на 10, и отсортировать результат на клиентском компьютере:

$Values | sort TimeGenerated -Descending

Если Вы хотите знать, какие свойства доступны, вы можете использовать:

> $Values | gm


   TypeName: System.Diagnostics.EventLogEntry#Security/Microsoft-Windows-Security-Auditing/4648

Name                      MemberType     Definition
----                      ----------     ----------
Disposed                  Event          System.EventHandler Disposed(System.Object, System.EventArgs)
CreateObjRef              Method         System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
Dispose                   Method         void Dispose(), void IDisposable.Dispose()
Equals                    Method         bool Equals(System.Diagnostics.EventLogEntry otherEntry), bool Equals(System.Object obj)
GetHashCode               Method         int GetHashCode()
GetLifetimeService        Method         System.Object GetLifetimeService()
GetObjectData             Method         void ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
GetType                   Method         type GetType()
InitializeLifetimeService Method         System.Object InitializeLifetimeService()
ToString                  Method         string ToString()
Category                  Property       string Category {get;}
CategoryNumber            Property       int16 CategoryNumber {get;}
Container                 Property       System.ComponentModel.IContainer Container {get;}
Data                      Property       byte[] Data {get;}
EntryType                 Property       System.Diagnostics.EventLogEntryType EntryType {get;}
Index                     Property       int Index {get;}
InstanceId                Property       long InstanceId {get;}
MachineName               Property       string MachineName {get;}
Message                   Property       string Message {get;}
ReplacementStrings        Property       string[] ReplacementStrings {get;}
Site                      Property       System.ComponentModel.ISite Site {get;set;}
Source                    Property       string Source {get;}
TimeGenerated             Property       datetime TimeGenerated {get;}
TimeWritten               Property       datetime TimeWritten {get;}
UserName                  Property       string UserName {get;}
EventID                   ScriptProperty System.Object EventID {get=$this.get_EventID() -band 0xFFFF;}


Надеюсь, что поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...