共用方式為


Get-WinEvent

從本機和遠端電腦上的事件記錄檔和事件追蹤記錄檔,取得事件。

語法

Get-WinEvent [-LogName] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [-FilterXPath <string>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

Get-WinEvent [-Path] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [-FilterXPath <string>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

Get-WinEvent [-ProviderName] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [-FilterXPath <string>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

Get-WinEvent -FilterHashTable <Hashtable[]> [-ComputerName <string>] [-Credential <PSCredential>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

Get-WinEvent [-ListLog] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [<CommonParameters>]

Get-WinEvent [-ListProvider] <string[]> [-ComputerName <string>] [-Credential <PSCredential>] [<CommonParameters>]

Get-WinEvent -FilterXml <XmlDocument> [-ComputerName <string>] [-Credential <PSCredential>] [-Force <switch>] [-MaxEvents <int64>] [-Oldest] [<CommonParameters>]

描述

Get-WinEvent Cmdlet 會從事件記錄檔取得事件,包括傳統記錄檔 (例如系統和應用程式記錄),以及由 Windows Vista 中引入的新 Windows 事件記錄檔技術所產生的事件記錄檔。同時也會從 Windows 事件追蹤 (ETW) 所產生的記錄檔中取得事件。

如果沒有參數,Get-WinEvent 命令會取得電腦上的所有事件記錄檔中的所有事件。若要中斷命令,請按 CTRL+C。

Get-WinEvent 也會列出事件記錄檔和事件記錄檔提供者。您可以從選取的記錄檔或者是選取的事件提供者所產生的記錄檔,取得事件。而且,您可以使用單一命令從多個來源合併事件。Get-WinEvent 可以讓您藉由使用 XPath 查詢、結構化 XML 查詢以及簡化的雜湊表查詢,篩選事件。

注意:Get-WinEvent 需要 Windows Vista、Windows Server 2008 R2 或較新版本的 Windows。此外,也需要 Microsoft .NET Framework 3.5 或以後的版本。

參數

-ComputerName <string>

從指定電腦上的事件記錄檔,取得事件。請輸入電腦的 NetBIOS 名稱、網際網路通訊協定 (IP) 位址或完整網域名稱。預設值為本機電腦。

此參數每次只能接受一個電腦名稱。若要尋找多台電腦上的事件記錄檔或事件,請使用 ForEach 陳述式。如需這個參數的詳細資訊,請參閱範例。

若要取得遠端電腦的事件和事件記錄檔,必須將事件記錄服務的防火牆連接埠設定成允許遠端存取。

此參數並不依存於 Windows PowerShell 遠端。即使沒有將電腦設定成執行遠端命令,也可以使用 ComputerName 參數。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Credential <PSCredential>

指定具有執行此動作之權限的使用者帳戶。預設值為目前使用者。

請輸入使用者名稱,例如 User01 或 Domain01\User01。或者輸入 PSCredential 物件,例如 Get-Credential Cmdlet 所產生的物件。如果輸入使用者名稱,將會提示您提供密碼。如果您只輸入參數名稱,則會提示您輸入使用者名稱和密碼。

必要?

false

位置?

named

預設值

目前使用者

接受管線輸入?

false

接受萬用字元?

false

-FilterHashTable

必要?

true

位置?

named

預設值

接受管線輸入?

true (ByValue)

接受萬用字元?

false

-FilterXml <XmlDocument>

請使用結構化 XML 查詢,從一個或多個事件記錄檔選取事件。

若要產生有效的 XML 查詢,請使用事件檢視器中的「建立自訂檢視」和「篩選目前的記錄」功能。使用對話方塊中的項目建立查詢,然後再按一下 [XML] 索引標籤,檢視查詢的 XML 格式。您可以複製 [XML] 索引標籤中的 XML,做為 FilterXml 參數值。如需事件檢視器功能的詳細資訊,請參閱事件檢視器說明。

一般而言,您會使用 XML 查詢,建立包含數個 XPath 陳述式的複雜查詢。XML 格式也可以讓您使用「抑制」XML 元素,從查詢中排除事件。如需事件記錄檔查詢的 XML 結構描述的詳細資訊,請參閱 MSDN (Microsoft Developer Network) 文件庫中的下列主題。

-- <查詢結構描述>:https://go.microsoft.com/fwlink/?LinkId=143685

-- <事件選取範圍>中的「XML 事件查詢」:https://go.microsoft.com/fwlink/?LinkID=143608

必要?

true

位置?

named

預設值

接受管線輸入?

true (ByValue)

接受萬用字元?

false

-FilterXPath <string>

請使用 XPath 查詢,從一個或多個記錄檔選取事件。

如需 XPath 語言的詳細資訊,請參閱 MSDN 文件庫中<事件選取範圍>的「選取範圍篩選器」,以及<XPath 參考>。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Force <switch>

除了其他事件記錄檔之外,取得偵錯和分析記錄檔。必須要有 Force 參數,才能在 Name 參數包含萬用字元時取得偵錯或分析記錄檔。

根據預設,Get-WinEvent 會排除這些記錄檔,除非您有指定偵錯或分析記錄檔的完整名稱。

必要?

false

位置?

named

預設值

沒有傳回偵錯與分析記錄以回應使用萬用字元的查詢。

接受管線輸入?

false

接受萬用字元?

false

-ListLog <string[]>

取得指定的事件記錄檔。請以逗號分隔的清單輸入事件記錄檔名稱。允許使用萬用字元。若要取得所有記錄檔,請輸入值 *。

必要?

true

位置?

1

預設值

接受管線輸入?

false

接受萬用字元?

true

-ListProvider <string[]>

取得指定的事件記錄檔提供者。事件記錄檔提供者是將事件寫入事件記錄檔的程式或服務。

請以逗號分隔的清單輸入提供者名稱。允許使用萬用字元。若要取得電腦上所有事件記錄檔的提供者,請輸入值 *。

必要?

true

位置?

1

預設值

接受管線輸入?

false

接受萬用字元?

true

-LogName <string[]>

從指定的事件記錄檔,取得事件。請以逗號分隔的清單輸入事件記錄檔名稱。允許使用萬用字元。您也可以經由管道將記錄檔名稱輸出至 Get-WinEvent。

必要?

true

位置?

1

預設值

接受管線輸入?

true (ByValue)

接受萬用字元?

true

-MaxEvents <int64>

指定 Get-WinEvent 所傳回的事件數目上限。請輸入整數。預設為傳回記錄檔或檔案中的所有事件。

必要?

false

位置?

named

預設值

所有事件

接受管線輸入?

false

接受萬用字元?

false

-Oldest

以先進先出的順序傳回事件。根據預設,事件的傳回順序為後進先出。

必須要有此參數,才能從 .etl 檔、.evt 檔、偵錯記錄檔和分析記錄檔取得事件。在這些檔案中,記錄事件的順序為先進先出,而且只能根據先進先出的順序傳回事件。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Path <string[]>

從指定的事件記錄檔,取得事件。請以逗號區隔的清單輸入記錄檔路徑,或是使用萬用字元建立檔案路徑模式。

Get-WinEvent 支援副檔名為 .evt、.evtx 和 .etl 的檔案。您可以在相同命令中,包含不同檔案和檔案類型的事件。

必要?

true

位置?

1

預設值

接受管線輸入?

false

接受萬用字元?

true

-ProviderName <string[]>

取得指定事件記錄檔提供者所寫入的事件。請以逗號區隔的清單輸入提供者名稱,或是使用萬用字元建立提供者名稱模式。

事件記錄檔提供者是將事件寫入事件記錄檔的程式或服務。並不是 Windows PowerShell 提供者。

必要?

true

位置?

1

預設值

接受管線輸入?

false

接受萬用字元?

true

<CommonParameters>

這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.

輸入和輸出

輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。

輸入

System.String, System.Xml.XmlDocument, System.Collections.Hashtable

您可以透過管道方式將 LogName (字串)、FilterXML 查詢或 FilterHashTable 查詢輸出至 Get-WinEvent。

輸出

System.Diagnostics.Eventing.Reader.EventLogConfiguration, System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.Eventing.Reader.ProviderMetadata

如果指定有 ListLog 參數,Get-WinEvent 會傳回 System.Diagnostics.Eventing.Reader.EventLogConfiguration 物件。如果指定有 ListProvider 參數,Get-WinEvent 傳回 System.Diagnostics.Eventing.Reader.ProviderMetadata 物件。搭配所有其他參數,Get-WinEvent 則會傳回 System.Diagnostics.Eventing.Reader.EventLogRecord 物件。

附註

Get-WinEvent 設計的用意是要在執行 Windows Vista 和較新版本的 Windows 電腦上,取代 Get-EventLog cmdlet。Get-EventLog 只會取得傳統事件記錄檔中的事件。Windows PowerShell 2.0 中仍有保留 Get-EventLog,以供比 Windows Vista 還要早的系統使用。

範例 1

C:\PS>get-winevent -listlog  *

描述
-----------
這個命令會取得本機電腦上的所有記錄檔。
    
記錄檔會以 Get-WinEvent 取得的順序列出。通常會先擷取傳統記錄檔,接著是新的 Windows Eventing 記錄檔。
    
因為通常會有上百個事件記錄檔,這個參數需要有記錄檔名稱或名稱模式。若要取得所有記錄檔,請使用 *。





範例 2

C:\PS>get-winevent -listlog Setup | format-list -property *

    
    FileSize                       : 69632
    IsLogFull                      : False
    LastAccessTime                 : 2/14/2008 12:55:12 AM
    LastWriteTime                  : 7/9/2008 3:12:05 AM
    OldestRecordNumber             : 1
    RecordCount                    : 3
    LogName                        : Setup
    LogType                        : Operational
    LogIsolation                   : Application
    IsEnabled                      : True
    IsClassicLog                   : False
    SecurityDescriptor             : O:BAG:SYD:(A;;0xf0007;;;SY)(A;
                                     (A;;0x1;;;S-1-5-32-573)
    LogFilePath                    : %SystemRoot%\System32\Winevt\L
    MaximumSizeInBytes             : 1052672
    LogMode                        : Circular
    OwningProviderName             : Microsoft-Windows-Eventlog
    ProviderNames                  : {Microsoft-Windows-WUSA, Micro
    ProviderLevel                  :
    ProviderKeywords               :
    ProviderBufferSize             : 64
    ProviderMinimumNumberOfBuffers : 0
    ProviderMaximumNumberOfBuffers : 64
    ProviderLatency                : 1000
    ProviderControlGuid            :

描述
-----------
這些命令取得的物件表示本機電腦上的傳統系統記錄檔。物件包含有用的記錄檔相關資訊,包括其大小、事件記錄檔提供者、檔案路徑以及其啟用狀況。





範例 3

C:\PS>get-winevent -listlog * -computername Server01| where {$_.recordcount}

描述
-----------
這個命令只會取得 Server01 電腦上包含事件的事件記錄檔。許多記錄檔有可能是空的。
    
這個命令使用的 RecordCount 屬性,屬於您使用 ListLog 參數時 Get-WinEvent 所傳回的 EventLogConfiguration 物件。





範例 4

C:\PS>$s = "Server01", "Server02", "Server03"

C:\PS> foreach ($server in $s) 
     {$server; get-winevent -listlog "Windows PowerShell" -computername $server}

描述
-----------
這個範例中的命令所取得的物件,表示 Server01、Server02 和 Server03 電腦上的 Windows PowerShell 事件記錄檔。因為 ComputerName 參數只能接受一個值,所以這個命令會使用 Foreach 關鍵字。
    
第一個命令會將電腦名稱儲存在 $s 變數中。
    
第二個命令則使用 Foreach 陳述式。針對 $s 變數中的每個電腦,陳述式會執行指令碼區塊 (位於大括號內) 中的命令。首先,命令會列印電腦名稱。接著,會執行 Get-WinEvent 命令,取得代表 Windows PowerShell 記錄的物件。





範例 5

C:\PS>get-winevent -listprovider *

描述
-----------
這個命令會取得本機電腦上的事件記錄檔提供者,以及其寫入的記錄檔 (若有的話)。





範例 6

C:\PS>(get-winevent -listlog Application).providernames

描述
-----------
這個命令會取得本機電腦上寫入應用程式記錄檔的所有提供者。





範例 7

C:\PS>>get-winevent -listprovider *policy*

描述
-----------
這個命令會取得名稱包含 "policy" 一字的事件記錄檔提供者。





範例 8

C:\PS>(get-winevent -listprovider microsoft-windows-grouppolicy).events | format-table id, description -auto

描述
-----------
這個命令會列出 Microsoft-Windows-GroupPolicy 事件提供者所產生的事件識別碼,以及事件描述。
    
其中會使用您在使用 ListProvider 參數時 Get-WinEvent 所傳回物件的 Events 屬性,並使用 Events 屬性中物件的 ID 和 Description 屬性。





範例 9

C:\PS>$events = get-winevent -logname "Windows PowerShell"

C:\PS> $events.count
195
    
C:\PS> $events | group-object id -noelement | sort-object count -desc
Count Name
----- ----
  147 600
   22 400
   21 601
    3 403
    2 103
    
 C:\PS> $events | group-object leveldisplayname -noelement
Count Name
----- ----
    2 Warning
  193 Information

描述
-----------
這個範例示範如何使用 Get-WinEvent 所傳回事件物件的屬性,了解事件記錄檔中的事件。
    
第一個命令使用 Get-WinEvent cmdlet,會取得 Windows PowerShell 事件記錄檔中的所有事件。然後將事件儲存在 $events 變數中。因為記錄檔名稱包含空格,所以置於引號中。
    
第二個命令使用物件集合的 Count 屬性,以找出事件記錄檔中的項目數目。
    
第三個命令則顯示記錄檔中每個事件的發生率,最頻繁的事件會最先列出。在這個範例中,事件識別碼 600 為最常發生的事件。
    
第四個命令會依據項目的 LevelDisplayName 屬性值進行分組,以顯示記錄檔中有多少 Error、Warning 和 Information 事件。





範例 10

C:\PS>get-winevent -logname *disk*, Microsoft-Windows-Kernel-WHEA

描述
-----------
這個命令會從電腦上名稱包含 "disk" 的所有事件記錄檔中,以及從 Microsoft-Windows-Kernel-WHEA 事件記錄檔中,取得錯誤事件。





範例 11

C:\PS>get-winevent -path 'c:\ps-test\Windows PowerShell.evtx'

描述
-----------
這個命令會從位於測試目錄的 Windows PowerShell 事件記錄檔複本中,取得事件。因為記錄檔名稱包含空格,所以會將路徑置於引號中。





範例 12

C:\PS>get-winevent -path 'c:\tracing\tracelog.etl' -maxevents 100 -oldest
    
C:\PS> get-winevent -path 'c:\tracing\tracelog.etl' -oldest | sort-object -property timecreated -desc | select-object -first 100

描述
-----------
這些命令會從 Windows 事件追蹤 (ETW) 事件追蹤記錄檔中,取得前 100 個事件。

第一個命令會取得記錄檔中最舊的 100 個事件,它使用 Get-WinEvent cmdlet 從 Tracelog.etl 檔案取得事件。還會使用 MaxEvents 參數限制擷取 100 個事件。因為事件是依據寫入記錄檔的順序而列出的 (先進先出),所以需要使用 Oldest 參數。

第二個命令會取得記錄檔中最新的 100 個事件。它使用 Get-WinEvent Cmdlet 從 Tracing.etl 檔案取得所有事件。並將
事件傳遞給 Sort-Object cmdlet,後者會依據 TimeCreated 屬性以遞減順序進行排序。接著,會將排序的事件傳送給 Select-Object Cmdlet,以選取最新的 100 個事件。





範例 13

C:\PS>get-winevent -path "c:\tracing\tracelog.etl", "c:\Logs\Windows PowerShell.evtx" -oldest | where {$_.id -eq "103"}

描述
-----------
這個範例示範如何從事件追蹤記錄檔 (.etl),以及從儲存在測試目錄的 Windows PowerShell 記錄檔 (.evtx) 複本中,取得事件

您可以使用單一命令合併多種檔案類型。因為檔案包含相同類型的 .NET Framework 物件 (EventLogRecord 物件),所以您可以使用相同的屬性進行篩選。

請注意,因為要從 .etl 檔案進行讀取,所以這個命令需要 Oldest 參數,但 Oldest 參數會套用到這兩個檔案。





範例 14

C:\PS># Use the Where-Object cmdlet
C:\PS> $yesterday = (get-date) - (new-timespan -day 1)
C:\PS> get-winevent -logname "Windows PowerShell" | where {$_.timecreated -ge $yesterday}


# Uses FilterHashTable
C:\PS> $yesterday = (get-date) - (new-timespan -day 1)
C:\PS> get-winevent -FilterHashTable @{LogName='Windows PowerShell'; Level=3; StartTime=$yesterday}


# Use FilterXML
C:\PS> get-winevent -FilterXML "<QueryList><Query><Select Path='Windows PowerShell'>*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 86400000]]]</Select></Query></QueryList>"


# Use FilterXPath
C:\PS> get-winevent -LogName "Windows Powershell" -FilterXPath "*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 86400000]]]"

描述
-----------
這個範例示範可用於從事件記錄檔選取事件的不同篩選方法。這些命令都會從 Windows PowerShell 事件記錄檔中取得過去 24 小時內所發生的事件。

篩選方法比使用 Where-Object Cmdlet 更有效率,因為在擷取物件的同時就會套用篩選條件,而不是先擷取所有物件後再進行篩選。

因為日期難以使用 XML 和 XPath 格式制定,為了要建立日期的 XML 內容,您要使用事件檢視器的「篩選目前的記錄」功能。如需這個功能的詳細資訊,請參閱事件檢視器說明。





範例 15

C:\PS>$date = (get-date).AddDays(-2)
    
C:\PS> $events = get-winevent -FilterHashTable @{ logname = "Microsoft-Windows-Diagnostics-Performance/Operational"; StartTime = $date; ID = 100 }

描述
-----------
這個範例使用篩選雜湊表,從效能記錄檔取得事件。
    
第一個命令使用 Get-Date cmdlet 和 AddDays 方法,取得代表目前日期前兩天的日期。然後將日期儲存在 $date 變數中。
    
第二個命令使用 Get-WinEvent cmdlet 搭配 FilterHashTable 參數。雜湊表中索引鍵所定義的篩選條件,會從效能記錄檔中選取過去兩天內發生的且事件識別碼為 100 的事件。
    
LogName 索引鍵用於指定事件記錄檔、StartTime 索引鍵用於指定日期,而 ID 索引鍵則用於指定事件識別碼。





範例 16

C:\PS>$starttime = (get-date).adddays(-7)        
    
C:\PS> $ie-error = Get-WinEvent -FilterHashtable @{logname="application"; providername="Application Error"; data="iexplore.exe"; starttime=$starttime}

描述
-----------
這個範例使用篩選雜湊表,找出發生於過去一週內的 Internet Explorer 應用程式錯誤。
    
第一個命令會取得代表目前日期前七天的日期,並儲存在 $starttime 變數中。
    
第二個命令使用 Get-WinEvent cmdlet 搭配 FilterHashTable 參數。雜湊表中索引鍵所定義的篩選條件,會從應用程式記錄檔中選取由 Application Error 提供者所寫入的且包含字詞 "iexplore.exe" 的事件。
    
LogName 索引鍵用於指定事件記錄檔。ProviderName 索引鍵用於指定事件提供者,StartTime 索引鍵用於指定事件的開始日期,而 Data 索引鍵則用於指定事件訊息中的文字。





請參閱

概念

Get-EventLog
Get-Counter
about_Eventlogs