Пожалуйста, объясните этот вывод Powershell для get-eventlog - форматирование вывода по умолчанию

get-eventlog -list

дает это:

 Max(K) Retain OverflowAction        Entries Log                                                                      
 ------ ------ --------------        ------- ---                                                                      
 20,480      0 OverwriteAsNeeded      14,418 Application                                                              
 20,480      0 OverwriteAsNeeded           0 HardwareEvents                                                           
    512      7 OverwriteOlder              0 Internet Explorer                                                        
 20,480      0 OverwriteAsNeeded           8 Key Management Service                                                   
    128      0 OverwriteAsNeeded          36 OAlerts                                                                  
                                          Security                                                                 
 20,480      0 OverwriteAsNeeded       8,771 System                                                                   
    512      7 OverwriteOlder              0 Windows Azure                                                            
 15,360      0 OverwriteAsNeeded          53 Windows PowerShell                                                       

а также...

get-eventlog-list | get-member

Результаты в этом (усечено для краткости):

TypeName: System.Diagnostics.EventLog

Name                      MemberType Definition                                                                        
----                      ---------- ----------                                                                        
Disposed                  Event      System.EventHandler       
Disposed(System.Object, System.EventArgs)                     
EntryWritten              Event      
System.Diagnostics.EntryWrittenEventHandler EntryWritten(System.Object, System....
BeginInit                 Method     void BeginInit(), void 
ISupportInitialize.BeginInit()                             
Clear                     Method     void Clear()                                                                      
Close                     Method     void Close()                                                                      
CreateObjRef              Method     System.Runtime.Remoting.ObjRef 
CreateObjRef(type requestedType)         

Мой вопрос: почему get-eventlog -list создает первый набор и почему, когда он передается по каналу, get-member дает второй? Два результата не кажутся связанными? И... где хранится эта информация? Я имею в виду, как я мог узнать это сам?

Благодарю.

2 ответа

PowerShell имеет собственную систему форматирования вывода, как описано в Get-Help about_Format.ps1xml

Он основан на связывании правил форматирования с типами.NET, классифицированными по типам представлений:
таблица, список, широкий, на заказ.
Правила по умолчанию применяются к типам без связанных данных форматирования.

  • При неявном выводе на консоль используется тип представления по умолчанию, определенный в данных форматирования; при его отсутствии объект с 4 свойствами приводит к табличному отображению (неявное Format-Table), помимо этого используется отображение многострочного списка для каждого объекта (неявное Format-List).

  • Кроме того, вы можете использовать Format-* Командлеты для создания определенного выходного формата: Format-Table (просмотр таблицы), Format-List (Посмотреть список), Format-Wide (широкий, однокомпонентный, многоколонный просмотр), Format-Custom (представление, которое в общем случае показывает внутреннюю структуру объекта в JSON- подобном формате).

Чтобы проверить правила форматирования, связанные с данным типом, используйте Get-FormatData,

В данном случае, Get-EventLog выводит объекты типа [System.Diagnostics.EventLog], чтобы проверить их форматирование данных, используйте:

Get-FormatData System.Diagnostics.EventLog | Format-Custom -Depth 10

Осмысление вывода нетривиально, но вся информация о форматировании есть.

Где хранится информация о форматировании:

  • В Windows PowerShell информацию о форматировании, которая поставляется вместе с PowerShell, можно найти в *.Format.ps1xml файлы в каталоге поддерева $PSHOME,

  • В PowerShell Core информация о форматировании, поставляемая с PowerShell, компилируется в исполняемый файл (pwsh).

  • Сторонние модули могут содержать свои собственные *.Format.ps1xml файлы для определения форматирования для типов, которые они выводят, внутренние ссылки на модуль через FormatsToProcess запись в манифесте модуля ( *.psd1 )

Помимо того, что TheIncorrigible1 уже дал вам.

Что касается этого...

Мой вопрос: почему get-eventlog -list создает первый набор и почему, когда он передается по каналу, get-member дает второй? Два результата не кажутся связанными

Поскольку это первое, вы явно запрашиваете список физических журналов в системе. Это, конечно, то, над чем вы можете работать.

Во-вторых, вы запрашиваете все методы и свойства командлета. Это то, что вы используете для выполнения действий над этими журналами. Get-Member позволяет нам получать информацию об объектах, возвращаемых командлетом.

Полностью документы на файлы справки и онлайн.

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-member?view=powershell-6

Это не одно и то же, следовательно, разные результаты.

Другие вопросы по тегам