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 コマンドレットは、イベント ログからイベントを取得します。これらのイベント ログには、システム ログ、アプリケーション ログなどの従来のログに加えて、Windows Vista で新しく導入された Windows イベント ログ技術により生成されるイベント ログが含まれます。また、Event Tracing for 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) アドレス、または完全修飾ドメイン名を入力します。既定値はローカル コンピューターです。

このパラメーターは、一度に 1 つのコンピューター名のみを受け入れます。複数のコンピューターでイベント ログやイベントを検索するには、ForEach ステートメントを使用します。このパラメーターの詳細については、例を参照してください。

リモート コンピューターからイベントおよびイベント ログを取得するには、リモート アクセスを許可するようにイベント ログ サービスのファイアウォール ポートを構成する必要があります。

このパラメーターは、Windows PowerShell リモート処理に依存しません。コンピューターがリモート コマンドを実行するように構成されていない場合でも、ComputerName パラメーターを使用できます。

必須

false

位置

named

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-Credential <PSCredential>

この処理を実行するアクセス許可を持つユーザー アカウントを指定します。既定値は現在のユーザーです。

"User01" や "Domain01\User01" などユーザー名を入力します。または、Get-Credential コマンドレットで生成されるような PSCredential オブジェクトを入力します。ユーザー名を入力すると、パスワードの入力を促すメッセージが表示されます。パラメーター名のみを入力した場合、ユーザー名とパスワードの両方の入力を求められます。

必須

false

位置

named

既定値

Current user

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-FilterHashTable <Hashtable[]>

ハッシュ テーブル形式のクエリを使用して、1 つ以上のイベント ログからイベントを選択します。クエリには、キーと値のペアを 1 つ以上格納しているハッシュ テーブルが含まれます。

ハッシュ テーブル クエリには、次のルールがあります。

-- キーおよび値の大文字と小文字は区別されません。

-- ワイルドカード文字は、LogName キーと ProviderName キーに関連付けられた値でのみ使用できます。

-- 各キーはハッシュ テーブルごとに 1 つのみ列挙できます。

-- Path 値には .etl、.evt、および .evtx ログ ファイルのパスを指定します。

-- LogName、Path、および ProviderName キーを同じクエリ内で使用できます。

-- UserID キーには、有効な System.Security.Principal.NTAccount オブジェクトの構築に使用できる有効なセキュリティ識別子 (SID) またはドメイン アカウント名を指定できます。

-- Data 値には、名前のないフィールドのイベント データを指定します。このルールは、従来のイベント ログに適用されます。

-- * キーは名前のあるイベント データ フィールドを表します。

Get-WinEvent でキーと値のペアを解釈できない場合、キーはイベントのイベント データ名として解釈され、大文字と小文字が区別されます。

有効なキーと値のペアは、次のとおりです。

-- LogName=<String[]>

-- ProviderName=<String[]>

-- Path=<String[]>

-- Keywords=<Long[]>

-- ID=<Int32[]>

-- Level=<Int32[]>

-- StartTime=<DateTime>

-- EndTime=<DataTime>

-- UserID=<SID>

-- Data=<String[]>

-- *=<String[]>

必須

true

位置

named

既定値

パイプライン入力を許可する

true (ByValue)

ワイルドカード文字を許可する

false

-FilterXml <XmlDocument>

構造化 XML クエリを使用して、1 つ以上のイベント ログからイベントを選択します。

有効な XML クエリを生成するには、イベント ビューアーの [カスタム ビューの作成] 機能と [現在のログをフィルター] 機能を使用します。ダイアログ ボックスの項目を使用してクエリを作成し、[XML] タブをクリックして XML 形式のクエリを表示します。[XML] タブの XML を FilterXml パラメーターの値にコピーできます。イベント ビューアー機能の詳細については、イベント ビューアーのヘルプを参照してください。

通常、XML クエリは複数の XPath ステートメントが含まれる複雑なクエリを作成する場合に使用します。XML 形式では、クエリからイベントを除外する "Suppress" 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 クエリを使用して、1 つ以上のログからイベントを選択します。

XPath 言語の詳細については、MSDN ライブラリの「Event Selection (イベント選択)」にある「Selection Filters (選択フィルター)」、および「XPath リファレンス」を参照してください。

必須

false

位置

named

既定値

なし

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-Force <switch>

その他のイベント ログに加え、デバッグ ログおよび分析ログを取得します。Name パラメーターの値にワイルドカード文字が含まれている場合にデバッグ ログまたは分析ログを取得するには、Force パラメーターを指定する必要があります。

既定では、デバッグ ログまたは分析ログの完全な名前を指定しない限り、Get-WinEvent によってこれらのログが除外されます。

必須

false

位置

named

既定値

Debugging and analytic logs are not returned in response to queries that use wildcard characters.

パイプライン入力を許可する

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

既定値

All events

パイプライン入力を許可する

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>

このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.

入力と出力

入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。

入力

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 オブジェクトを返します。

Windows Vista 以降のバージョンの Windows を実行しているコンピューターでは、Get-WinEvent が Get-EventLog コマンドレットの代替として設計されています。Get-EventLog は、従来のイベント ログのイベントのみを取得します。Get-EventLog は Windows PowerShell 2.0 に保持されており、Windows Vista より前のシステム用です。

例 1

C:\PS>get-winevent -listlog  *

説明
-----------
このコマンドは、ローカル コンピューター上のすべてのログを取得します。
    
ログは、Get-WinEvent が取得する順序で一覧表示されます。通常、従来のログが最初に取得され、その後に新しい Windows Eventing ログが取得されます。
    
一般に 100 を超えるイベント ログが存在するため、このパラメーターにはログ名または名前パターンが必要です。すべてのログを取得するには、* を使用します。





例 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 コンピューター上のイベント ログのみを取得します。ログの多くが空である可能性があります。
    
ListLog パラメーターを使用する場合は、Get-WinEvent が返す EventLogConfiguration オブジェクトの RecordCount プロパティが使用されます。





例 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 パラメーターに指定できる値は 1 つだけであるため、このコマンドは Foreach キーワードを使用します。
    
最初のコマンドは、コンピューターの名前を $s 変数に保存します。
    
2 番目のコマンドは、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 イベント プロバイダーにより生成されたイベント ID をイベントの説明と共に一覧表示します。
    
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 コマンドレットを使用して、Windows PowerShell イベント ログのすべてのイベントを取得します。次に、それらのイベントを $events 変数に保存します。ログ名にスペースが含まれるため、ログ名を引用符で囲みます。
    
2 番目のコマンドは、オブジェクト コレクションの Count プロパティを使用して、イベント ログに含まれるエントリの数を調べます。
    
3 番目のコマンドは、ログに含まれる各イベントの出現回数を表示します。このとき、頻度の高いイベントから順に表示されます。この例では、ID 600 のイベントが最も頻度の高いイベントです。
    
4 番目のコマンドは、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

説明
-----------
これらのコマンドは、ETW (Event Tracing for Windows) イベント トレース ログ ファイルから最初の 100 個のイベントを取得します。

最初のコマンドは、ログのイベントを古い順に 100 個取得します。このコマンドは、Get-WinEvent コマンドレットを使用して、Tracelog.etl ファイルからイベントを取得します。MaxEvents パラメーターを使用して、取得するイベントの数を 100 個に制限しています。イベントはログに書き込まれた順序で (古い順に) 一覧表示されるため、Oldest パラメーターが必要です。

2 番目のコマンドは、ログのイベントを新しい順に 100 個取得します。このコマンドは、まず Get-WinEvent コマンドレットを使用して、Tracelog.etl ファイルからすべてのイベントを取得します。次に、それらのイベントを Sort-Object コマンドレットに渡し、TimeCreated プロパティ値の降順にイベントを並べ替えます。その後、並べ替えたイベントを Select-Object コマンドレットに送信して、イベントを新しいものから順に 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]]]"

説明
-----------
この例では、イベント ログからイベントを選択するさまざまなフィルター処理方法を示します。これらのコマンドはすべて、過去 24 時間以内に発生したイベントを Windows PowerShell イベント ログから取得します。

フィルターは、Where-Object コマンドレットを使用するよりも効率が良い方法です。これは、すべてのオブジェクトを取得した後にオブジェクトをフィルター処理するのではなく、オブジェクトを取得する際にフィルターが適用されるためです。

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 コマンドレットと AddDays メソッドを使用して、現在の日付の 2 日前の日付を取得します。日付は $date 変数に保存します。
    
2 番目のコマンドは、Get-WinEvent コマンドレットを FilterHashTable パラメーターと共に使用しています。ハッシュ テーブル内のキーを使用して、過去 2 日以内に発生し、イベント ID が 100 であるイベントをパフォーマンス ログから選択するフィルターを定義します。
    
LogName キーにはイベント ログを、StartTime キーには日付を、ID キーにはイベント 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}

説明
-----------
この例では、フィルター ハッシュ テーブルを使用して、過去 1 週間以内に発生した Internet Explorer アプリケーション エラーを検索します。
    
最初のコマンドは、現在の日付の 7 日前の日付を取得し、$starttime 変数に保存します。
    
2 番目のコマンドは、Get-WinEvent コマンドレットを FilterHashTable パラメーターと共に使用しています。ハッシュ テーブル内のキーを使用して、Application Error プロバイダーにより書き込まれ、"iexplore.exe" という語句を含むイベントをアプリケーション ログから選択するフィルターを定義します。
    
LogName キーにはイベント ログを指定します。ProviderName キーにはイベント プロバイダーを、StartTime キーにはイベントの開始日を、Data キーにはイベント メッセージのテキストをそれぞれ指定します。





関連項目

概念

Get-EventLog
Get-Counter
about_Eventlogs