Пожалуйста, объясните этот вывод 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 позволяет нам получать информацию об объектах, возвращаемых командлетом.
Полностью документы на файлы справки и онлайн.
Это не одно и то же, следовательно, разные результаты.