get-winevent: изменение формата файла на groupby logname не имеет эффекта

#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...