#powershell #format #get-winevent
#powershell #форматировать #get-winevent
Вопрос:
Я хочу изменить вывод get-winevent по умолчанию, чтобы он выглядел примерно так в powershell 5.1, поэтому в заголовке указано LogName вместо ProviderName.
get-winevent application -MaxEvents 1
LogName: Application
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
8/23/2020 10:32:25 AM 0
Я могу сделать это очень легко в powershell 7, отредактировав Event.format.ps1xml где-нибудь в $ PSHOME:
<ViewSelectedBy>
<TypeName>System.Diagnostics.Eventing.Reader.EventLogRecord</TypeName>
</ViewSelectedBy>
<GroupBy>
<PropertyName>LogName</PropertyName>
<Label>LogName</Label>
</GroupBy>
Но в powershell 5.1, после изменения владельца и безопасности, чтобы я мог записывать в этот файл, то же самое изменение, похоже, не имеет никакого эффекта! Похоже, что get-winevent полностью игнорирует этот файл. Как я могу внести это изменение?
cd $pshome
takeown /f Event.Format.ps1xml /a
icacls event.format.ps1xml /grant administrators:w
Я думаю, что этот формат где-то определен в c #? Удалите сгенерированные типы и форматы для Microsoft.PowerShell.Диагностика #1218
Комментарии:
1. Вы не забыли
Update-FormatData
об этом после?2. @MathiasR.Jessen Нет, но я перезапустил powershell, снова вошел в систему и т.д. Я только что попробовал это сейчас, но никакого эффекта.
3. Я помню, как Дон Джонс говорил, что файлы ps1xml имеют цифровую подпись, и вам не следует изменять оригиналы, а вместо этого создавать копию. Я подтвердил, что без изменения каких-либо разрешений я могу просто скопировать файл в другое место, изменить его, а затем
Update-TypeData -Appendpath pathtonew.ps1xml
и он работает нормально. Разве этого было бы недостаточно?4. В about_format.ps1xml говорится: «Начиная с PowerShell 6, представления по умолчанию определяются в исходном коде PowerShell. Файлы формата.ps1xml из PowerShell 5.1 и более ранних версий не существуют в PowerShell 6 и более поздних версиях. Исходный код PowerShell определяет отображение объектов по умолчанию в консоли PowerShell. Вы можете создать свои собственные файлы формата.ps1xml, чтобы изменить отображение объектов или определить отображение по умолчанию для новых типов объектов, которые вы создаете в PowerShell.»
5. @DougMaurer Да, создание файла нового формата — это решение. Документы неверны, что не является чем-то необычным. Файл все еще там, но он находится в $ pshome Modules Microsoft. PowerShell. Диагностикаevent.format.ps1xml. У меня не было проблем с его изменением и вступлением в силу. В powershell 5.1 файл находится по адресу $pshome event.format.ps1xml, но не служит никакой цели.
Ответ №1:
Кто-то подтвердил, что event.format.ps1xml не используется в powershell 5.1 по соображениям производительности. Вместо этого формат определен в c #. https://github.com/PowerShell/PowerShell/issues/1218#issuecomment-678804787
«Format-table -groupby logname» вроде как работает в ps 5. В заголовке по-прежнему указано «providername», но на самом деле это не так. Лучше сначала отсортировать его. у $pshome event.format.ps1xml нет функции в powershell 5.1. Я не верю, что тип EventLogRecord доступен для форматирования.
get-winevent application,system -maxevents 3 | sort logname | ft -GroupBy logname
ProviderName: Application
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
8/23/2020 7:10:04 PM 16384 Information Successfully scheduled Software Protection service for re-start at 20...
8/23/2020 8:06:25 PM 455 Error svchost (7476,R,98) TILEREPOSITORYS-1-5-18: Error -1023 (0xfffffc01) ...
ProviderName: System
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
8/23/2020 8:14:59 PM 10016 Warning The machine-default permission settings do not grant Local Activation...