Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.09.2018
Сообщений: 3

Запись output скрипта в csv-файлы

10.09.2018, 15:31. Показов 1762. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Гуру powershell, помогите!

Есть скрипт, который забирает нужные Event Log с WEC-коллектора. Стоит задача: вывод работы этого скрипта записывать в csv-файлы, для дальнейшего анализа. Собственно для этой цели использую Export-Csv. Он отлично отрабатывает, все поля верно раскидывает с нужным дилиметром, но после того как ориентировочно в csv записывается 1500 строк (~500kb), скрипт падает без каких либо ошибок и запись в csv прекращается. Вопрос, что я делаю не так и куда копать? Скрипт прилагаю. Спасибо!

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
$eventLogCollector = 'WEC-collector'
$Date = $(Get-Date -UFormat "%EventLog-%Y-%m-%d_%Hh")
#XML Filter for Get-WinEvent
$eventFilter = @"
<QueryList>
  <Query Id="0" Path="ForwardedEvents">
    <Select Path="ForwardedEvents">*[RenderingInfo[(Channel='Security')]]</Select>
  </Query>
</QueryList>
"@
 
Get-WinEvent -FilterXml $eventFilter -ComputerName $eventLogCollector  | foreach {
    $result = [xml] $_.ToXml()
 
    $PSObject = New-Object PSObject
    $output = "" | select SystemTimeZulu,SystemDateZulu,Message,Provider,SubjectUserSid,SubjectUserName,SubjectDomainName,SubjectLogonId,TargetUserSid,TargetUserName,TargetDomainName,TargetLogonId,LogonType,LogonProcessName,AuthenticationPackageName,WorkstationName,LogonGuid,TransmittedServices,LmPackageName,KeyLength,ProcessId,ProcessName,IpAddress,IpPort,EventID,EventRecordID,Channel,ComputerName,Level,Keyword
 
    $output.SystemTimeZulu= ([datetime]$result.Event.System.TimeCreated.SystemTime -split " ")[1]
    $output.SystemDateZulu= ([datetime]$result.Event.System.TimeCreated.SystemTime -split " ")[0]
    $output.Message =  [regex]::Match($result.Event.RenderingInfo.Message, ".*\.")
    $output.Level =  $result.Event.RenderingInfo.Level
    $output.Keyword =  $result.Event.RenderingInfo.Keywords.Keyword
    $output.EventID= $result.Event.System.EventID
    $output.Provider= $result.Event.System.Provider.Name
    $output.EventRecordID = $result.Event.System.EventRecordID
    $output.Channel = $result.Event.System.Channel
    $output.ComputerName = $result.Event.System.Computer
    #$output.SubjectUserName = $result.Event.EventData.Data.SubjectUserName
    
 
        #Build object from Event XML Data
        $result.Event.EventData.Data  | foreach {
            $PSObject | Add-Member NoteProperty $_.Name $_."#text"            
        }
 
    $output.SubjectUserSid= $PSObject.SubjectUserSid
    $output.SubjectUserName= $PSObject.SubjectUserName
    $output.SubjectDomainName = $PSObject.SubjectDomainName
    $output.SubjectLogonId = $PSObject.SubjectLogonId
    $output.TargetUserSid = $PSObject.TargetUserSid
    $output.TargetUserName = $PSObject.TargetUserName
    $output.TargetDomainName = $PSObject.TargetDomainName
    $output.TargetLogonId = $PSObject.TargetLogonId
    $output.LogonType = $PSObject.LogonType
    $output.LogonProcessName = $PSObject.LogonProcessName
    $output.AuthenticationPackageName = $PSObject.AuthenticationPackageName
    $output.WorkstationName = $PSObject.WorkstationName
    $output.LogonGuid = $PSObject.LogonGuid
    $output.TransmittedServices = $PSObject.TransmittedServices
    $output.LmPackageName = $PSObject.LmPackageName
    $output.KeyLength = $PSObject.KeyLength
    $output.ProcessId = $PSObject.ProcessId
    $output.ProcessName = $PSObject.ProcessName
    $output.IpAddress = $PSObject.IpAddress
    $output.IpPort= $PSObject.IpPort
    
    $output 
} | Export-Csv -Path C:\PowershellData\$Date.csv -Delimiter ";" -NoTypeInformation
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2018, 15:31
Ответы с готовыми решениями:

Вывод результата выполнения скрипта в .csv
Доброго дня, нужна помощь с: Cкрипт опрашивает около 200 компьютеров в лесу AD. Не все из них могут быть доступны, а опросить в конечном...

Запись в CSV-файл из массива. Не является форматом csv!
В общем искал работу... Дали тестовое написать парсер для сайта с выводом информации в csv-файл. Всё написал, сбросил, пришёл ответ что у...

Импорт из csv в базу данных посредством php скрипта
Привет, друзья. Есть php скрипт &lt;?php $file_name = 'сайт.ру/uploads/files/content.csv'; // абсолютный путь до файла //$file_name =...

5
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.09.2018, 16:45
Цитата Сообщение от Kroper34 Посмотреть сообщение
после того как ориентировочно в csv записывается 1500 строк (~500kb), скрипт падает без каких либо ошибок и запись в csv прекращается. Вопрос, что я делаю не так и куда копать?
Попробуйте сначала сохранить результат в переменную, а затем уже её содержимое экспортировать в csv-файл

PowerShell
1
2
3
4
5
$data = Get-WinEvent -FilterXml $eventFilter -ComputerName $eventLogCollector  | foreach {
...
}
 
$data | Export-Csv -Path C:\PowershellData\$Date.csv -Delimiter ";" -NoTypeInformation
Добавлено через 56 минут
+ вот вариант, который успешно создал у меня почти мегабайтный csv-файл:

Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$eventLogCollector = 'WEC-collector'
$Date = $(Get-Date -UFormat "%EventLog-%Y-%m-%d_%Hh")
#XML Filter for Get-WinEvent
$eventFilter = @"
<QueryList>
  <Query Id="0" Path="ForwardedEvents">
    <Select Path="ForwardedEvents">*[RenderingInfo[(Channel='Security')]]</Select>
  </Query>
</QueryList>
"@
 
 
Get-WinEvent -FilterXml $eventFilter -ComputerName $eventLogCollector  | % {
    $result = [xml] $_.ToXml()
    $EventData = New-Object PSObject
    $result.Event.EventData.Data | % {$EventData | Add-Member NoteProperty $_.Name $_."#text"}
 
    New-Object PSObject -Property @{
 
    SystemTimeZulu = ([datetime]$result.Event.System.TimeCreated.SystemTime -split " ")[1]
    SystemDateZulu= ([datetime]$result.Event.System.TimeCreated.SystemTime -split " ")[0]
    Message =  [regex]::Match($result.Event.RenderingInfo.Message, ".*\.")
    Level =  $result.Event.RenderingInfo.Level
    Keyword =  $result.Event.RenderingInfo.Keywords.Keyword
    EventID= $result.Event.System.EventID
    Provider= $result.Event.System.Provider.Name
    EventRecordID = $result.Event.System.EventRecordID
    Channel = $result.Event.System.Channel
    ComputerName = $result.Event.System.Computer
    #SubjectUserName = $result.Event.EventData.Data.SubjectUserName
    SubjectUserSid= $EventData.SubjectUserSid
    SubjectUserName= $EventData.SubjectUserName
    SubjectDomainName = $EventData.SubjectDomainName
    SubjectLogonId = $EventData.SubjectLogonId
    TargetUserSid = $EventData.TargetUserSid
    TargetUserName = $EventData.TargetUserName
    TargetDomainName = $EventData.TargetDomainName
    TargetLogonId = $EventData.TargetLogonId
    LogonType = $EventData.LogonType
    LogonProcessName = $EventData.LogonProcessName
    AuthenticationPackageName = $EventData.AuthenticationPackageName
    WorkstationName = $EventData.WorkstationName
    LogonGuid = $EventData.LogonGuid
    TransmittedServices = $EventData.TransmittedServices
    LmPackageName = $EventData.LmPackageName
    KeyLength = $EventData.KeyLength
    ProcessId = $EventData.ProcessId
    ProcessName = $EventData.ProcessName
    IpAddress = $EventData.IpAddress
    IpPort= $EventData.IpPort
    }
 
} | Export-Csv -Path C:\PowershellData\$Date.csv -Delimiter ";" -NoTypeInformation
1
0 / 0 / 0
Регистрация: 10.09.2018
Сообщений: 3
10.09.2018, 17:25  [ТС]
Цитата Сообщение от KDE777 Посмотреть сообщение
Попробуйте сначала сохранить результат в переменную, а затем уже её содержимое экспортировать в csv-файл

PowerShell
1
2
3
4
5
$data = Get-WinEvent -FilterXml $eventFilter -ComputerName $eventLogCollector  | foreach {
...
}
 
$data | Export-Csv -Path C:\PowershellData\$Date.csv -Delimiter ";" -NoTypeInformation
Добавлено через 56 минут
+ вот вариант, который успешно создал у меня почти мегабайтный csv-файл:

Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$eventLogCollector = 'WEC-collector'
$Date = $(Get-Date -UFormat "%EventLog-%Y-%m-%d_%Hh")
#XML Filter for Get-WinEvent
$eventFilter = @"
<QueryList>
  <Query Id="0" Path="ForwardedEvents">
    <Select Path="ForwardedEvents">*[RenderingInfo[(Channel='Security')]]</Select>
  </Query>
</QueryList>
"@
 
 
Get-WinEvent -FilterXml $eventFilter -ComputerName $eventLogCollector  | % {
    $result = [xml] $_.ToXml()
    $EventData = New-Object PSObject
    $result.Event.EventData.Data | % {$EventData | Add-Member NoteProperty $_.Name $_."#text"}
 
    New-Object PSObject -Property @{
 
    SystemTimeZulu = ([datetime]$result.Event.System.TimeCreated.SystemTime -split " ")[1]
    SystemDateZulu= ([datetime]$result.Event.System.TimeCreated.SystemTime -split " ")[0]
    Message =  [regex]::Match($result.Event.RenderingInfo.Message, ".*\.")
    Level =  $result.Event.RenderingInfo.Level
    Keyword =  $result.Event.RenderingInfo.Keywords.Keyword
    EventID= $result.Event.System.EventID
    Provider= $result.Event.System.Provider.Name
    EventRecordID = $result.Event.System.EventRecordID
    Channel = $result.Event.System.Channel
    ComputerName = $result.Event.System.Computer
    #SubjectUserName = $result.Event.EventData.Data.SubjectUserName
    SubjectUserSid= $EventData.SubjectUserSid
    SubjectUserName= $EventData.SubjectUserName
    SubjectDomainName = $EventData.SubjectDomainName
    SubjectLogonId = $EventData.SubjectLogonId
    TargetUserSid = $EventData.TargetUserSid
    TargetUserName = $EventData.TargetUserName
    TargetDomainName = $EventData.TargetDomainName
    TargetLogonId = $EventData.TargetLogonId
    LogonType = $EventData.LogonType
    LogonProcessName = $EventData.LogonProcessName
    AuthenticationPackageName = $EventData.AuthenticationPackageName
    WorkstationName = $EventData.WorkstationName
    LogonGuid = $EventData.LogonGuid
    TransmittedServices = $EventData.TransmittedServices
    LmPackageName = $EventData.LmPackageName
    KeyLength = $EventData.KeyLength
    ProcessId = $EventData.ProcessId
    ProcessName = $EventData.ProcessName
    IpAddress = $EventData.IpAddress
    IpPort= $EventData.IpPort
    }
 
} | Export-Csv -Path C:\PowershellData\$Date.csv -Delimiter ";" -NoTypeInformation
Спасибо большое за ответ! Выяснил, что из локальных папок типа Security, тоже хорошо работает и Ваш, и мой вариант. Однако с папкой Forwarded Events, в которую валяться события со всех серверов и рабочих станций этот код отказывается корректно работать. Может быть у Вас есть опыт работы именно с событиями из Forwarded Events?
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.09.2018, 17:34
Цитата Сообщение от Kroper34 Посмотреть сообщение
опыт работы именно с событиями из Forwarded Events
Forwarded Events сейчас под рукой нет, но я выбрал Security события с удалённого DC за последние 30 дней, csv-файл получился ~950KB и ничего не упало.

Попробуйте выбирать данные ограниченные диапазоном дат, а результат сохраняйте с помощью Export-Csv и ключа -Append
0
0 / 0 / 0
Регистрация: 10.09.2018
Сообщений: 3
11.09.2018, 11:10  [ТС]
Цитата Сообщение от KDE777 Посмотреть сообщение
Forwarded Events сейчас под рукой нет, но я выбрал Security события с удалённого DC за последние 30 дней, csv-файл получился ~950KB и ничего не упало.

Попробуйте выбирать данные ограниченные диапазоном дат, а результат сохраняйте с помощью Export-Csv и ключа -Append
Скорее всего я не так Вас понял, но мне нужно, чтобы вновь попавшие события в папку Forwarded Events, писались в csv-файлы по заданной маске. С вариантом папок типа Security, Application и System все ок, а с Forwarded Events это не срабатывает. Можете кодом проиллюстрировать что Вы имеет ввиду?
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
11.09.2018, 11:49
Цитата Сообщение от Kroper34 Посмотреть сообщение
но мне нужно, чтобы вновь попавшие события в папку Forwarded Events, писались в csv-файлы по заданной маске.
Ещё раз, ForwardedEvents коллектора сейчас под рукой нет, но разве ваш xml-фильтр не просто выбирает всё что относится к Security из ForwardedEvents?

PowerShell
1
2
3
4
5
6
7
$eventFilter = @"
<QueryList>
  <Query Id="0" Path="ForwardedEvents">
    <Select Path="ForwardedEvents">*[RenderingInfo[(Channel='Security')]]</Select>
  </Query>
</QueryList>
"@
Обычно, фильтр с ограничением диапазона дат выглядит примерно так:

PowerShell
1
2
3
4
5
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[TimeCreated[timediff(@SystemTime) &lt;= 43200000]]]</Select>
  </Query>
</QueryList>
или так:

PowerShell
1
2
3
4
5
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[TimeCreated[@SystemTime&gt;='2018-09-09T21:00:00.000Z' and @SystemTime&lt;='2018-09-10T21:00:00.999Z']]]</Select>
  </Query>
</QueryList>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2018, 11:49
Помогаю со студенческими работами здесь

CSV файлы
Здравствуйте, на входе есть csv файл, либо (как вариант) строковая переменная, содержащая уже взятую из этого файла строку. Нужно...

CSV файлы
Добрый день уважаемые форумчан) Недавно начала писать диплом для защиты бакалавриата,соответственно возникла куча проблем, одна из них...

Что может значить такая ошибка. Ambiguity between 'Output' and 'System::Output'
Если кто может, помогите разобраться с этой ошибкой. Unit1.cpp(85): E2015 Ambiguity between 'Output' and 'System::Output' ...

как сделать в MS VS 2010 express output не в консоль в output windows
сабж заранее спасибо

Запись в CSV
Здравствуйте подскажите пожалуйста почему парсер записывает каждую букву в о дельную ячейку . import requests from bs4 import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru