请解释此Powershell输出以获取事件日志-默认输出格式

时间:2018-08-10 21:17:17

标签: powershell formatting

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 个答案:

答案 0 :(得分:3)

TheIncorrigible1已经给您的东西之外。

至此...

  

我的问题是:为什么get-eventlog -list产生第一组,而   为什么将其通过管道传递给get-member会产生第二个?他们俩   结果似乎无关

因为是第一个,所以您明确要求在系统上列出物理日志。当然,这是您可以进行的工作。

第二个是您要询问cmdlet的所有方法和属性。这是用来对那些日志执行操作的方法。 Get-Member允许我们获取有关cmdlet返回的对象的信息。

有关帮助文件和在线文档的全部内容。

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

这些不是同一件事,因此输出是不同的。

答案 1 :(得分:3)

PowerShell具有自己的输出格式系统,如Get-Help about_Format.ps1xml

中所述

它基于与.NET类型相关的格式设置规则,并按 视图类型分类:
表格,列表,宽幅,自定义。

默认规则适用于没有相关格式数据的类型。

  • 向控制台输出 隐式 时,将使用格式数据中定义的默认视图类型。如果不存在,则具有最多 4 个属性的对象将显示在表格式中(隐式Format-Table),超出了每个对象的多行列表使用显示(隐式Format-List)。

  • 或者,您可以使用Format-* cmdlet 生成特定的输出格式:Format-Table(表视图),Format-List(列表视图),Format-Wide(宽,单属性,多列视图),Format-Custom(通常以JSON- like 格式显示对象内部结构的视图)。

要检查与给定类型关联的格式设置规则,请使用Get-FormatData

在当前情况下,Get-EventLog输出类型为[System.Diagnostics.EventLog]的对象,因此要检查其格式数据,请使用:

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

对输出的理解并不重要,但是所有格式信息都在那里。

存储格式信息的位置

  • Windows PowerShell 中,可以在*.Format.ps1xml的目录子树的$PSHOME文件中找到PowerShell附带的格式化信息。

  • 在PowerShell Core 中,PowerShell附带的格式信息被编译为可执行文件pwsh)。

  • 第三方模块可以包含自己的*.Format.ps1xml文件,以定义其输出类型的格式,这些文件通过模块manifest (*.psd1)中的FormatsToProcess条目在内部进行引用。