#windows #powershell #powershell-4.0
#Windows #powershell #powershell-4.0
Вопрос:
У меня есть скрипт, который экспортирует события из журнала событий, например:
Get-EventLog -LogName Application | Where-Object Source -Match "my application" | export-csv "$FileDate.csv"
Когда я открываю CSV, он тоже выглядит не так, как я хочу. Он показывает
EventID,»MachineName»,»Data»,»Index»,»Category»,»CategoryNumber»,»EntryType»,»Message»,»Source»,»ReplacementStrings»,»InstanceId»,»TimeGenerated»,»TimeWritten»,»UserName»,»Site»,»Container» 0, «РАБОЧИЙ СТОЛ-ID94AN3», «Система.Байт[]»,»21425″,»(0)»,»0″,» Ошибка»,»Завершено выполнение проекта «Testproject» Выполнение пакета «Сбой» Сбой выполнения Время начала: 21/12/2020 19:47:52 Время окончания: 21/12/2020 19:47:56 на сервере: РАБОЧИЙ СТОЛ-ID94AN3 -Logmessage
После преобразования текста в столбцы:
С информацией в столбцах, где ее не должно быть. Кажется, что он объединяет 2 окна из средства просмотра событий. «Верхнее» окно с ошибками и «нижнее» окно с подробностями. Все, что мне нужно, это верхнее окно.
Если я запущу этот код в Windows Powershell ISE:
Get-EventLog -LogName Application | Where-Object Source -Match "Myapplication"
Это выглядит так, как я хочу, чтобы это тоже выглядело (после использования текста в столбцах):
Index Time EntryType Source InstanceID Message
----- ---- --------- ------ ---------- -------
21425 Dec 21 19:47 Error Myapplication LogEn... 0 Message 1
21424 Dec 21 19:47 Information Myapplicationr LogEn... 0 Message 2
Как мне сделать так, чтобы мой экспорт CSV также выглядел так?
Комментарии:
1. то, что вы показываете, НЕ является форматом csv… это система отображения powershell, отображающая коллекцию объектов, полученных в результате импорта CSV. фактический файл — это просто текст, разделенный символом-разделителем.
2. Отредактировано для уточнения.
3. вы говорите
It looks how I want it too look:
и показываете, что powershell показывает после импорта CSV … но это не CSV — это массив powershell, созданный путем импорта CSV. ///// вы НЕ МОЖЕТЕ создать CSV, который выглядит так… это не будет CSV! [ усмешка ] это будет только обычный текстовый файл с почти нулевой структурой.4. Хорошо, перефразируя, я хочу, чтобы это выглядело так после того, как я использую преобразование текста в столбцы в моем CSV. И это не так. Все, что указано в разделе «Сбой выполнения» (см. Скриншот), не должно находиться в том же столбце, что и EventID.
5. кул! теперь, ПОЖАЛУЙСТА, измените свой вопрос, чтобы указать, что вы на самом деле хотите. по-прежнему требуется, чтобы файл CSV выглядел как обычный текстовый отчет.
Ответ №1:
Вы можете придать ему желаемый вид, выбрав только те столбцы, которые вам нужны, перед отправкой результатов Export-CSV
.
Get-EventLog -LogName Application | Where-Object Source -Match "edgeupdate" |
Select -first 10 -Property Index, Time, EntryType, Source, InstanceId, Message |
Export-Csv -NoTypeInformation
Комментарии:
1. Это работает, за исключением сообщения. Кажется, он помещает его в первый столбец, как показано на моем скриншоте.
2. @Elmer Попробуйте это с
-UseCulture
помощью переключателя, добавленного кExport-Csv
командлету. У меня такое чувство, что ваш Excel использует другой символ-разделитель, чем запятая по умолчанию.3. Много ли в вашем приложении символов-запятых в поле сообщения? Возможно, это связано
4. @Elmer вы дважды щелкнули файл или импортировали его в Excel, а затем сделали
text-to-columns
? сообщение, вероятно, представляет собой многострочную строку.text-to-columns
вероятно, происходит сбой при просмотре новых строк. Просто дважды щелкните, но используйте-UseCulture
в противном случае excel помещает все это в столбец 15. @Elmer Если вы экспортируете, используя символ-разделитель, который ожидает Excel (путем добавления `-UseCulture»), вам не нужно выполнять Text-To_Columns. Это та часть, которая портит ваш лист Excel.