Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Как отфильтровать вывод скрипта, удалив из него строки с подстрокой

Ответить
Настройки темы
PowerShell - Как отфильтровать вывод скрипта, удалив из него строки с подстрокой

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем доброе время.

Нашел в сети powershell скрипт и допилил его под себя. (для русской Windows Server)
Он на windows Server (2016) читает лог успешных попыток входа и выводит их за определенное время.

Выводит он что-то типа такого:

TimeGenerated ClientIP Username LogType
------------- -------- -------- -------
23.04.2020 10:45:33 - -\СИСТЕМА Service
23.04.2020 10:41:44 - -\СИСТЕМА Service
23.04.2020 10:41:44 - -\СИСТЕМА Service
23.04.2020 10:35:26 192.168.0.66 MAINS\acidс RDP
23.04.2020 10:35:26 192.168.0.66 MAINS\acidс RDP
23.04.2020 10:35:25 - -\DWM-16 Interactive - local logon

Можно ли как-то куда-то перенаправить вывод, чтобы отфильтровать строки, содержащие "-\СИСТЕМА"?

Чтобы остались только:

23.04.2020 10:35:26 192.168.0.66 MAINS\acidс RDP
23.04.2020 10:35:25 - -\DWM-16 Interactive - local logon


Код: Выделить весь код
Get-EventLog -LogName Security -after ((Get-date).AddMinutes(-200))| ?{(4624) -contains $_.EventID  -and $_.Message -match ‘Тип входа:’}| %{
#rdp - 10, без него будет выводить все логины match 'Тип входа:\s+(10)\s'
(new-object -Type PSObject -Property @{
TimeGenerated = $_.TimeGenerated
ClientIP = $_.Message -replace '(?smi).*Сетевой адрес источника:\s+([^\s]+)\s+.*','$1'
UserName =(([regex]'(?<=Новый вход:.*[\s\S]*.*записи:.\s)([\s\S]*)(?=\s\n.*Домен)').match($_.message).value)
UserDomain = $_.Message -replace '(?smi).*Имя рабочей станции:\s+([^\s]+)\s+.*','$1'
LogonType = $_.Message -replace '(?smi).*Тип входа:\s+([^\s]+)\s+.*','$1'
})
} | sort TimeGenerated -Descending | Select TimeGenerated, ClientIP `
, @{N='Username';E={'{0}\{1}' -f $_.UserDomain,$_.UserName}} `
, @{N='LogType';E={
switch ($_.LogonType) {
2 {'Interactive - local logon'}
3 {'Network conection to shared folder)'}
4 {'Batch'}
5 {'Service'}
7 {'Unlock (after screensaver)'}
8 {'NetworkCleartext'}
9 {'NewCredentials (local impersonation process under existing connection)'}
10 {'RDP'}
11 {'CachedInteractive'}
default {"LogType Not Recognised: $($_.LogonType)"}
}
}}

Отправлено: 11:13, 23-04-2020

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


overrise,
Цитата:
но не пишет имени пользователя
Значит в самом логе UserName пустой.

Отправлено: 21:36, 16-05-2020 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


В самом событии дисконнекта, если на него посмотреть, есть и имя и пк с которого вышел пользователь и его IP.
Если в журнале Windows отфильтровать событие 4779(Данное событие возникает, когда пользователь отключается от существующего сеанса служб терминалов либо переключается с существующего рабочего стола с помощью быстрого переключения пользователей.), я вижу:

AccountName serg
AccountDomain FILESERVER
LogonID 0xe44811e
SessionName RDP-Tcp#58
ClientName LAPTOP
ClientAddress 192.168.20.74

Может быть дело в парсинге данных?

Отправлено: 09:47, 17-05-2020 | #22


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата overrise:
Может быть дело в парсинге данных? »
Может быть. Выложите, как выглядят эти два события. У меня нет ни одного 4779.

Отправлено: 11:31, 17-05-2020 | #23


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Странно, при дисконнекте по RDP выскакивать должно это событие по любому. Законнектиться, закрыть соединение и оно появляется.

Вот XML события:

Код: Выделить весь код
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" /> 
  <EventID>4779</EventID> 
  <Version>0</Version> 
  <Level>0</Level> 
  <Task>12551</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x8020000000000000</Keywords> 
  <TimeCreated SystemTime="2020-05-16T16:29:54.469735400Z" /> 
  <EventRecordID>167278009</EventRecordID> 
  <Correlation ActivityID="{C2DFD717-2AEC-0000-1DD7-DFC2EC2AD601}" /> 
  <Execution ProcessID="736" ThreadID="3856" /> 
  <Channel>Security</Channel> 
  <Computer>fileserver</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data Name="AccountName">serg</Data> 
  <Data Name="AccountDomain">FILESERVER</Data> 
  <Data Name="LogonID">0xe44811e</Data> 
  <Data Name="SessionName">RDP-Tcp#58</Data> 
  <Data Name="ClientName">LAPTOP</Data> 
  <Data Name="ClientAddress">192.168.20.74</Data> 
  </EventData>
  </Event>

Отправлено: 18:35, 17-05-2020 | #24


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Ну а так, что-нибудь показывает?
Код: Выделить весь код
$report =
Get-EventLog -LogName Security -InstanceID 4624,4779 -Newest 10 |
    Foreach-Object {

        [PSCustomObject] @{

            InstanceID = $_.InstanceID
            EventID = $_.EventID
            MachineName = $_.MachineName
            UserName = $_.ReplacementStrings[5]
            TimeGenerated = $_.TimeGenerated
        }
    }

$report | Sort-Object TimeGenerated | Format-Table

Последний раз редактировалось Foreigner, 17-05-2020 в 23:33.


Отправлено: 23:16, 17-05-2020 | #25


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот такое выдает, по ходу там имя пользователя в другой переменной хранится при дисконнекте, если я правильно понимаю:

InstanceID EventID MachineName UserName TimeGenerated
---------- ------- ----------- -------- -------------
4624 4624 fileserver serg 18.05.2020 8:15:03
4624 4624 fileserver serg 18.05.2020 8:15:03
4624 4624 fileserver DWM-7 18.05.2020 8:15:03
4624 4624 fileserver DWM-7 18.05.2020 8:15:03
4779 4779 fileserver 192.168.20.74 18.05.2020 8:15:51
4624 4624 fileserver serg 18.05.2020 8:16:02
4624 4624 fileserver serg 18.05.2020 8:16:03
4624 4624 fileserver serg 18.05.2020 8:16:03
4624 4624 fileserver DWM-7 18.05.2020 8:16:03
4624 4624 fileserver DWM-7 18.05.2020 8:16:03

Отправлено: 08:20, 18-05-2020 | #26


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Если я беру событие 4779 и вывожу echo $_.ReplacementStrings, то получаю вот такие ответы:

serg
FILESERVER
0xe44811e
RDP-Tcp#77
LAPTOP
192.168.20.74

serg
FILESERVER
0xe44811e
RDP-Tcp#78
LAPTOP
192.168.20.74

Отправлено: 08:41, 18-05-2020 | #27


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата overrise:
то получаю вот такие ответы »
Это для одного события 4779 или для двух? Вообще как-то странно, имхо, должен быть какой-то стандарт. Не прописывать же условия для каждого события:
Код: Выделить весь код
$report =
Get-EventLog -LogName Security -InstanceID 4624,4779 -Newest 10 |
    Foreach-Object {

        if ($_InstanceID -eq 4624) { $n = 5 }
        else { $n = 0 }

        [PSCustomObject] @{

            InstanceID = $_.InstanceID
            EventID = $_.EventID
            MachineName = $_.MachineName
            UserName = $_.ReplacementStrings[$n]
            TimeGenerated = $_.TimeGenerated
        }
    }

$report | Sort-Object TimeGenerated | Format-Table

Отправлено: 08:53, 18-05-2020 | #28


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


При этом 4624:

Код: Выделить весь код
S-1-0-0
-
-
0x0
S-1-5-21-2348659260-1389582479-2633529765-1000
serg
FILESERVER
0x1eba2ed5
3
NtLmSsp 
NTLM
LAPTOP
{00000000-0000-0000-0000-000000000000}
-
NTLM V2
128
0x0
-
192.168.20.74
0
%%1833
-
-
-
%%1843
0x0
%%1843
Цитата Foreigner:
Это для одного события 4779 или для двух? Вообще как-то странно, имхо, должен быть какой-то стандарт. Не прописывать же условия для каждого события: »
Это два события.

А вот что выдает новый скрипт:

InstanceID EventID MachineName UserName TimeGenerated
---------- ------- ----------- -------- -------------
4624 4624 fileserver S-1-5-18 18.05.2020 8:45:01
4624 4624 fileserver S-1-5-18 18.05.2020 8:45:01
4624 4624 fileserver S-1-5-18 18.05.2020 8:50:00
4624 4624 fileserver S-1-5-18 18.05.2020 8:55:00
4779 4779 fileserver serg 18.05.2020 8:56:27
4624 4624 fileserver S-1-0-0 18.05.2020 8:56:33
4624 4624 fileserver S-1-5-18 18.05.2020 8:56:34
4624 4624 fileserver S-1-5-18 18.05.2020 8:56:34
4624 4624 fileserver S-1-5-18 18.05.2020 8:56:34
4624 4624 fileserver S-1-5-18 18.05.2020 8:56:34

Походу да, Microsoft решила сделать для каждого события свой набор переменных.

Отправлено: 08:55, 18-05-2020 | #29


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Забыл точку после $_
Код: Выделить весь код
if ($_.InstanceID

Отправлено: 09:02, 18-05-2020 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Как отфильтровать вывод скрипта, удалив из него строки с подстрокой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Как вставить в тело сообщения вывод из данного скрипта - LLC Скриптовые языки администрирования Windows 8 06-04-2015 08:36
CMD/BAT - [решено] Вычитание символов из строки и вывод на экран Instant_SR Скриптовые языки администрирования Windows 4 25-07-2013 11:37
CMD/BAT - [решено] Копирование имени файла и определённой строки из него в другой файл Liquid Ocelot Скриптовые языки администрирования Windows 10 05-07-2013 09:35
CMD/BAT - [решено] вывод строки из *.xml LAKERS824 Скриптовые языки администрирования Windows 26 08-07-2012 00:09
Запуск PHP-скрипта из командной строки Windows vadimiron Вебмастеру 4 01-12-2005 15:12




 
Переход