Get-WinEvent

로컬 및 원격 컴퓨터의 이벤트 로그 및 이벤트 추적 로그 파일에서 이벤트를 가져옵니다.

Syntax

Get-WinEvent
   [[-LogName] <String[]>]
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-ListLog] <String[]>
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-Force]
   [<CommonParameters>]
Get-WinEvent
   [-ListProvider] <String[]>
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [<CommonParameters>]
Get-WinEvent
   [-ProviderName] <String[]>
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-Path] <String[]>
   [-MaxEvents <Int64>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterHashtable] <Hashtable[]>
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXml] <XmlDocument>
   [-Oldest]
   [<CommonParameters>]

Description

이 cmdlet은 Windows 플랫폼에서만 사용할 수 있습니다.

cmdlet은 Get-WinEvent 시스템 및 애플리케이션 로그와 같은 클래식 로그를 포함하여 이벤트 로그에서 이벤트를 가져옵니다. cmdlet은 Windows Vista에 도입된 Windows 이벤트 로그 기술과 ETW(Windows용 이벤트 추적)에서 생성된 로그 파일의 이벤트에서 생성된 이벤트 로그에서 데이터를 가져옵니다. 기본적으로 Get-WinEvent 이벤트 정보를 최신에서 가장 오래된 순서로 반환합니다.

Get-WinEvent 는 이벤트 로그 및 이벤트 로그 공급자를 나열합니다. 명령을 중단하려면 Ctrl+C를 누릅니다. 선택한 로그 또는 선택한 이벤트 공급자가 생성한 로그에서 이벤트를 가져올 수 있습니다. 하나의 명령에 여러 원본의 이벤트를 결합할 수도 있습니다. Get-WinEvent XPath 쿼리, 구조적 XML 쿼리 및 해시 테이블 쿼리를 사용하여 이벤트를 필터링할 수 있습니다.

PowerShell을 관리istrator로 실행하지 않는 경우 로그에 대한 정보를 검색할 수 없다는 오류 메시지가 표시될 수 있습니다.

예제

예제 1: 로컬 컴퓨터에서 모든 로그 가져오기

이 명령은 로컬 컴퓨터의 모든 이벤트 로그를 가져옵니다. 로그는 로그를 가져오는 순서대로 Get-WinEvent 나열됩니다. 클래식 로그가 먼저 검색된 후 새 Windows 이벤트 로그가 표시됩니다. 로그 의 RecordCount 가 null이거나 비어 있거나 0일 수 있습니다.

Get-WinEvent -ListLog *

LogMode   MaximumSizeInBytes RecordCount LogName
-------   ------------------ ----------- -------
Circular            15532032       14500 Application
Circular             1052672         117 Azure Information Protection
Circular             1052672        3015 CxAudioSvcLog
Circular            20971520             ForwardedEvents
Circular            20971520           0 HardwareEvents

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. ListLog 매개 변수는 별표(*) wild카드를 사용하여 각 로그에 대한 정보를 표시합니다.

예제 2: 클래식 설치 로그 가져오기

이 명령은 클래식 설치 로그를 나타내는 EventLogConfiguration 개체를 가져옵니다. 개체에는 파일 크기, 공급자, 파일 경로 및 로그 사용 여부와 같은 로그에 대한 정보가 포함됩니다.

Get-WinEvent -ListLog Setup | Format-List -Property *

FileSize                       : 69632
IsLogFull                      : False
LastAccessTime                 : 3/13/2019 09:41:46
LastWriteTime                  : 3/13/2019 09:41:46
OldestRecordNumber             : 1
RecordCount                    : 23
LogName                        : Setup
LogType                        : Operational
LogIsolation                   : Application
IsEnabled                      : True
IsClassicLog                   : False
SecurityDescriptor             : O:BAG:SYD: ...
LogFilePath                    : %SystemRoot%\System32\Winevt\Logs\Setup.evtx
MaximumSizeInBytes             : 1052672
LogMode                        : Circular
OwningProviderName             : Microsoft-Windows-Eventlog
ProviderNames                  : {Microsoft-Windows-WUSA, Microsoft-Windows-ActionQueue...
ProviderLevel                  :
ProviderKeywords               :
ProviderBufferSize             : 64
ProviderMinimumNumberOfBuffers : 0
ProviderMaximumNumberOfBuffers : 64
ProviderLatency                : 1000
ProviderControlGuid            :

cmdlet은 Get-WinEvent ListLog 매개 변수를 사용하여 설치 로그를 지정합니다. 개체가 파이프라인 아래로 cmdlet으로 Format-List 전송됩니다. Format-List별표(*) wild카드와 함께 Property 매개 변수를 사용하여 각 속성을 표시합니다.

예제 3: 클래식 보안 로그 구성

이 명령은 클래식 보안 로그를 나타내는 EventLogConfiguration 개체를 가져옵니다. 그런 다음 개체를 사용하여 최대 파일 크기, 파일 경로 및 로그 사용 여부와 같은 로그에 대한 설정을 구성합니다.

$log = Get-WinEvent -ListLog Security
$log.MaximumSizeInBytes = 1gb
try{
   $log.SaveChanges()
   Get-WinEvent -ListLog Security | Format-List -Property *
}catch [System.UnauthorizedAccessException]{
   $ErrMsg  = 'You do not have permission to configure this log!'
   $ErrMsg += ' Try running this script with administrator privileges. '
   $ErrMsg += $_.Exception.Message
   Write-Error $ErrMsg
}

FileSize                       : 69632
IsLogFull                      : False
LastAccessTime                 : 3/13/2019 09:41:46
LastWriteTime                  : 3/13/2019 09:41:46
OldestRecordNumber             : 1
RecordCount                    : 23
LogName                        : Security
LogType                        : Administrative
LogIsolation                   : Custom
IsEnabled                      : True
IsClassicLog                   : True
SecurityDescriptor             : O:BAG:SYD: ...
LogFilePath                    : %SystemRoot%\System32\Winevt\Logs\Security.evtx
MaximumSizeInBytes             : 1073741824
LogMode                        : Circular
OwningProviderName             :
ProviderNames                  : {Microsoft-Windows-WUSA, Microsoft-Windows-ActionQueue...
ProviderLevel                  :
ProviderKeywords               :
ProviderBufferSize             : 64
ProviderMinimumNumberOfBuffers : 0
ProviderMaximumNumberOfBuffers : 64
ProviderLatency                : 1000
ProviderControlGuid            :

cmdlet은 Get-WinEvent ListLog 매개 변수를 사용하여 보안 로그를 지정합니다. 개체가 변수에 저장됩니다. MaximumSizeInBytes 속성은 개체에서 1GB로 설정됩니다. SaveChanges 메서드는 액세스 위반을 처리하기 위해 try 블록 내의 시스템에 변경 사항을 푸시하기 위해 호출됩니다. cmdlet은 Get-WinEvent 보안 로그에서 다시 호출되고 cmdlet에 Format-List 파이프되어 MaximumSizeInBytes 속성이 컴퓨터에 저장되었는지 확인합니다.

예제 4: 서버에서 이벤트 로그 가져오기

이 명령은 이벤트를 포함하는 로컬 컴퓨터에서만 이벤트 로그를 가져옵니다. 로그 의 RecordCount 가 null 또는 0일 수 있습니다. 이 예제에서는 변수를 $_ 사용합니다. 자세한 내용은 about_Automatic_Variables를 참조하세요.

Get-WinEvent -ListLog * -ComputerName localhost | Where-Object { $_.RecordCount }

LogMode   MaximumSizeInBytes RecordCount LogName
-------   ------------------ ----------- -------
Circular            15532032       14546 Application
Circular             1052672         117 Azure Information Protection
Circular             1052672        2990 CxAudioSvcLog
Circular             1052672           9 MSFTVPN Setup
Circular             1052672         282 OAlerts

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. ListLog 매개 변수는 별표(*) wild카드를 사용하여 각 로그에 대한 정보를 표시합니다. ComputerName 매개 변수는 로컬 컴퓨터 localhost에서 로그를 가져오기 위해 지정합니다. 개체는 파이프라인 아래로 cmdlet으로 Where-Object 전송됩니다. Where-Object 는 데이터를 포함하는 로그만 반환하는 데 사용됩니다 $_.RecordCount . $_ 는 파이프라인의 현재 개체를 나타내는 변수입니다. RecordCount 는 null이 아닌 값을 가진 개체의 속성입니다.

예제 5: 여러 서버에서 이벤트 로그 가져오기

이 예제에서는 Server01, Server02 및 Server03의 세 컴퓨터에서 애플리케이션 이벤트 로그를 나타내는 개체를 가져옵니다. ComputerName 매개 변수는 하나의 값만 허용하므로 ForEach 키워드(keyword) 사용됩니다. 자세한 내용은 about_Foreach 참조하세요.

$S = 'Server01', 'Server02', 'Server03'
ForEach ($Server in $S) {
  Get-WinEvent -ListLog Application -ComputerName $Server |
    Select-Object LogMode, MaximumSizeInBytes, RecordCount, LogName,
      @{name='ComputerName'; expression={$Server}} |
    Format-Table -AutoSize
}

LogMode MaximumSizeInBytes RecordCount LogName     ComputerName
 ------- ------------------ ----------- -------     ------------
Circular           15532032       14577 Application Server01
Circular           15532032        9689 Application Server02
Circular           15532032        5309 Application Server03

변수 $S 는 서버01, Server02Server03이라는 세 개의 서버 이름을 저장합니다. ForEach 문은 루프를 사용하여 각 서버를 ($Server in $S)처리합니다. 중괄호({ })의 스크립트 블록이 명령을 실행합니다 Get-WinEvent . ListLog 매개 변수는 애플리케이션 로그를 지정합니다. ComputerName 매개 변수는 변수 $Server 를 사용하여 각 서버에서 로그 정보를 가져옵니다.

개체는 파이프라인 아래로 cmdlet으로 Select-Object 전송됩니다. Select-ObjectLogMode, MaximumSizeInBytes, RecordCount, LogName 속성을 가져오고 계산된 식을 사용하여 변수를 사용하여 ComputerName$Server 표시합니다. 개체는 PowerShell 콘솔에 출력을 Format-Table 표시하기 위해 파이프라인을 cmdlet으로 보냅니다. AutoSize 매개 변수는 화면에 맞게 출력의 형식을 지정합니다.

예제 6: 이벤트 로그 공급자 및 로그 이름 가져오기

이 명령은 이벤트 로그 공급자 및 해당 공급자가 작성하는 로그를 가져옵니다.

Get-WinEvent -ListProvider *

Name     : .NET Runtime
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : .NET Runtime Optimization Service
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. ListProvider 매개 변수는 별표(*) wild카드를 사용하여 각 공급자에 대한 정보를 표시합니다. 출력 에서 이름은 공급자이고 LogLinks 는 공급자가 쓰는 로그입니다.

예제 7: 특정 로그에 쓰는 모든 이벤트 로그 공급자 가져오기

이 명령은 애플리케이션 로그에 쓰는 모든 공급자를 가져옵니다.

(Get-WinEvent -ListLog Application).ProviderNames

.NET Runtime
.NET Runtime Optimization Service
Application
Application Error
Application Hang
Application Management

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. ListLog 매개 변수는 Application을 사용하여 해당 로그에 대한 개체를 가져옵니다. ProviderNames는 개체의 속성이며 애플리케이션 로그에 쓰는 공급자를 표시합니다.

예제 8: 특정 문자열을 포함하는 이벤트 로그 공급자 이름 가져오기

이 명령은 공급자 이름에 특정 문자열을 포함하는 이름을 가진 이벤트 로그 공급자를 가져옵니다.

Get-WinEvent -ListProvider *Policy*

Name     : Group Policy Applications
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : Group Policy Client
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : Group Policy Data Sources
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. ListProvider 매개 변수는 별표(*) wild카드를 사용하여 공급자 이름 내의 아무 곳이나 정책을습니다.

예제 9: 이벤트 공급자가 생성하는 이벤트 ID 가져오기

이 명령은 Microsoft-Windows-GroupPolicy 이벤트 공급자가 이벤트 설명과 함께 생성하는 이벤트 ID를 나열합니다.

(Get-WinEvent -ListProvider Microsoft-Windows-GroupPolicy).Events | Format-Table Id, Description

Id  Description
  --  -----------
1500  The Group Policy settings for the computer were processed successfully...
1501  The Group Policy settings for the user were processed successfully...
4115  Group Policy Service started.
4116  Started the Group Policy service initialization phase.
4117  Group Policy Session started.

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. ListProvider 매개 변수는 공급자인 Microsoft-Windows-GroupPolicy를 지정합니다. 식은 괄호로 래핑되고 Events 속성을 사용하여 개체를 가져옵니다. 개체는 파이프라인 아래로 cmdlet으로 Format-Table 전송됩니다. Format-Table 는 이벤트 개체의 ID설명을 표시합니다.

예제 10: 이벤트 개체 속성에서 로그 정보 가져오기

이 예제에서는 이벤트 개체 속성을 사용하여 로그의 내용에 대한 정보를 가져오는 방법을 보여 줍니다. 이벤트 개체는 변수에 저장되고 이벤트 ID 및 수준별로 그룹화되고 계산됩니다.

$Event = Get-WinEvent -LogName 'Windows PowerShell'
$Event.Count
$Event | Group-Object -Property Id -NoElement | Sort-Object -Property Count -Descending
$Event | Group-Object -Property LevelDisplayName -NoElement

195

Count  Name
-----  ----
  147  600
   22  400
   21  601
    3  403
    2  103

Count  Name
-----  ----
    2  Warning
  193  Information

cmdlet은 Get-WinEvent LogName 매개 변수를 사용하여 Windows PowerShell 이벤트 로그를 지정합니다. 이벤트 개체는 변수에 $Event 저장됩니다. Count 속성$Event기록된 총 이벤트 수를 보여 줍니다.

변수가 $Event 파이프라인 아래로 cmdlet으로 Group-Object 전송됩니다. Group-Object는 Property 매개 변수를 사용하여 Id 속성을 지정하고 이벤트 ID 값으로 개체 수를 계산합니다. NoElement 매개 변수는 개체 출력에서 다른 속성을 제거합니다. 그룹화된 개체는 파이프라인 아래로 cmdlet으로 Sort-Object 전송됩니다. Sort-ObjectProperty 매개 변수를 사용하여 Count별로 개체를 정렬합니다. 내림차순 매개 변수는 출력을 개수별로 가장 높은 값에서 가장 낮은 값으로 표시합니다. 출력 에서 Count 열에는 각 이벤트의 총 수가 포함됩니다. 이름 열에는 그룹화된 이벤트 ID 번호가 포함됩니다.

변수가 $Event 파이프라인 아래로 cmdlet으로 Group-Object 전송됩니다. Group-Object는 Property 매개 변수를 사용하여 LevelDisplayName 속성을 지정하고 LevelDisplayName별로 개체 수를 계산합니다. 개체는 경고정보와 같은 수준으로 그룹화됩니다. NoElement 매개 변수는 출력에서 다른 속성을 제거합니다. 출력 에서 Count 열에는 각 이벤트의 총 수가 포함됩니다. 이름 열에는 그룹화된 LevelDisplayName포함됩니다.

예제 11: 이름에 지정된 문자열이 있는 오류 이벤트 가져오기

이 예제에서는 로그 이름의 쉼표로 구분된 문자열을 사용합니다. 출력은 오류 또는 경고 및 로그 이름과 같은 수준으로 그룹화됩니다.

Get-WinEvent -LogName *PowerShell*, Microsoft-Windows-Kernel-WHEA* |
  Group-Object -Property LevelDisplayName, LogName -NoElement |
    Format-Table -AutoSize

Count  Name
-----  ----
    1  Error, PowerShellCore/Operational
   26  Information, Microsoft-Windows-Kernel-WHEA/Operational
  488  Information, Microsoft-Windows-PowerShell/Operational
   77  Information, PowerShellCore/Operational
 9835  Information, Windows PowerShell
   19  Verbose, PowerShellCore/Operational
  444  Warning, Microsoft-Windows-PowerShell/Operational
  512  Warning, PowerShellCore/Operational

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. LogName 매개 변수는 별표(*) wild카드와 함께 쉼표로 구분된 문자열을 사용하여 로그 이름을 지정합니다. 개체는 파이프라인 아래로 cmdlet으로 Group-Object 전송됩니다. Group-Object는 Property 매개 변수를 사용하여 LevelDisplayName 및 LogName별로 개체를 그룹화합니다. NoElement 매개 변수는 출력에서 다른 속성을 제거합니다. 그룹화된 개체는 파이프라인 아래로 cmdlet으로 Format-Table 전송됩니다. Format-Table 에서는 AutoSize 매개 변수를 사용하여 열의 서식을 지정합니다. Count 열에는 각 이벤트의 총 수가 포함됩니다. 이름 열에는 그룹화된 LevelDisplayNameLogName이 포함됩니다.

예제 12: 보관된 이벤트 로그에서 이벤트 가져오기

Get-WinEvent 는 저장된 로그 파일에서 이벤트 정보를 가져올 수 있습니다. 이 샘플에서는 로컬 컴퓨터에 저장된 보관된 PowerShell 로그를 사용합니다.

Get-WinEvent -Path 'C:\Test\Windows PowerShell.evtx'

ProviderName: PowerShell

TimeCreated              Id LevelDisplayName  Message
-----------              -- ----------------  -------
3/15/2019 13:54:13      403 Information       Engine state is changed from Available to Stopped...
3/15/2019 13:54:13      400 Information       Engine state is changed from None to Available...
3/15/2019 13:54:13      600 Information       Provider "Variable" is Started...
3/15/2019 13:54:13      600 Information       Provider "Function" is Started...
3/15/2019 13:54:13      600 Information       Provider "FileSystem" is Started...

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. Path 매개 변수는 디렉터리 및 파일 이름을 지정합니다.

예제 13: 보관된 이벤트 로그에서 특정 수의 이벤트 가져오기

이러한 명령은 보관된 이벤트 로그에서 특정 수의 이벤트를 가져옵니다. Get-WinEvent 에는 최대 이벤트 수 또는 가장 오래된 이벤트를 가져올 수 있는 매개 변수가 있습니다. 이 샘플에서는 C:\Test\PowerShellCore Operational.evtx저장된 보관된 PowerShell 로그를 사용합니다.

Get-WinEvent -Path 'C:\Test\PowerShellCore Operational.evtx' -MaxEvents 100

ProviderName: PowerShellCore

TimeCreated                 Id   LevelDisplayName  Message
-----------                 --   ----------------  -------
3/15/2019 09:54:54        4104   Warning           Creating Scriptblock text (1 of 1):...
3/15/2019 09:37:13       40962   Information       PowerShell console is ready for user input
3/15/2019 07:56:24        4104   Warning           Creating Scriptblock text (1 of 1):...
...
3/7/2019 10:53:22        40961   Information       PowerShell console is starting up
3/7/2019 10:53:22         8197   Verbose           Runspace state changed to Opening
3/7/2019 10:53:22         8195   Verbose           Opening RunspacePool

cmdlet은 Get-WinEvent 컴퓨터에서 로그 정보를 가져옵니다. Path 매개 변수는 디렉터리와 파일 이름을 지정합니다. MaxEvents 매개 변수는 100개의 레코드가 최신 레코드에서 가장 오래된 레코드로 표시되도록 지정합니다.

예제 14: Windows용 이벤트 추적

ETW(Windows용 이벤트 추적)는 이벤트가 발생할 때 로그에 이벤트를 씁니다. 이벤트는 가장 오래된 것에서 최신 순서로 저장됩니다. 보관된 ETW 파일은 TraceLog.etl과 같이 저장 .etl 됩니다. 이벤트는 로그에 기록되는 순서대로 나열되므로 가장 오래된 매개 변수가 필요합니다.

Get-WinEvent -Path 'C:\Tracing\TraceLog.etl' -Oldest |
  Sort-Object -Property TimeCreated -Descending |
    Select-Object -First 100

cmdlet은 Get-WinEvent 보관된 파일에서 로그 정보를 가져옵니다. Path 매개 변수는 디렉터리 및 파일 이름을 지정합니다. 가장 오래된 매개 변수는 기록된 순서대로 이벤트를 출력하는 데 사용되며, 가장 오래된 매개 변수에서 최신으로 출력됩니다. 개체는 파이프라인 Sort-Object 아래로 전송되어 timeCreated Sort-Object 속성 값에 따라 개체를 내림차순으로 정렬합니다. 개체는 100개의 최신 이벤트를 표시하는 cmdlet으로 파이프라인 Select-Object 아래로 전송됩니다.

예제 15: 이벤트 추적 로그에서 이벤트 가져오기

이 예제에서는 이벤트 추적 로그 파일() 및 보관된 Windows PowerShell 로그 파일(.etl.evtx)에서 이벤트를 가져오는 방법을 보여 줍니다. 여러 파일 형식을 단일 명령으로 결합할 수 있습니다. 파일에 동일한 형식의 .NET Framework 개체인 EventLogRecord가 포함되어 있으므로 동일한 속성으로 필터링할 수 있습니다. 이 명령은 파일에서 읽기 때문에 가장 오래된 매개 변수가 .etl 필요하지만 가장 오래된 매개 변수는 각 파일에 적용됩니다.

Get-WinEvent -Path 'C:\Tracing\TraceLog.etl', 'C:\Test\Windows PowerShell.evtx' -Oldest |
  Where-Object { $_.Id -eq '403' }

cmdlet은 Get-WinEvent 보관된 파일에서 로그 정보를 가져옵니다. Path 매개 변수는 쉼표로 구분된 목록을 사용하여 각 파일 디렉터리와 파일 이름을 지정합니다. 가장 오래된 매개 변수는 기록된 순서대로 이벤트를 출력하는 데 사용되며, 가장 오래된 매개 변수에서 최신으로 출력됩니다. 개체는 파이프라인 아래로 cmdlet으로 Where-Object 전송됩니다. Where-Object는 스크립트 블록을 사용하여 ID가 403이벤트를 찾습니다. 변수는 $_ 파이프라인의 현재 개체를 나타내고 ID 는 이벤트 ID 속성입니다.

예제 16: 이벤트 로그 결과 필터링

이 예제에서는 이벤트 로그에서 이벤트를 필터링하고 선택하는 다양한 방법을 보여 줍니다. 이러한 모든 명령은 Windows PowerShell 이벤트 로그에서 지난 24시간 동안 발생한 이벤트를 가져옵니다. 필터 메서드는 cmdlet을 Where-Object 사용하는 것보다 더 효율적입니다. 필터는 개체가 검색될 때 적용됩니다. Where-Object 는 모든 개체를 검색한 다음 모든 개체에 필터를 적용합니다.

# Using the Where-Object cmdlet:
$Yesterday = (Get-Date) - (New-TimeSpan -Day 1)
Get-WinEvent -LogName 'Windows PowerShell' | Where-Object { $_.TimeCreated -ge $Yesterday }

# Using the FilterHashtable parameter:
$Yesterday = (Get-Date) - (New-TimeSpan -Day 1)
Get-WinEvent -FilterHashtable @{ LogName='Windows PowerShell'; Level=3; StartTime=$Yesterday }

# Using the FilterXML parameter:
$xmlQuery = @'
<QueryList>
  <Query Id="0" Path="Windows PowerShell">
    <Select Path="System">*[System[(Level=3) and
        TimeCreated[timediff(@SystemTime) <= 86400000]]]</Select>
  </Query>
</QueryList>
'@
Get-WinEvent -FilterXML $xmlQuery

# Using the FilterXPath parameter:
$XPath = '*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 86400000]]]'
Get-WinEvent -LogName 'Windows PowerShell' -FilterXPath $XPath

예제 17: FilterHashtable을 사용하여 애플리케이션 로그에서 이벤트 가져오기

이 예제에서는 FilterHashtable 매개 변수를 사용하여 애플리케이션 로그에서 이벤트를 가져옵니다. 해시 테이블은 키/값 쌍을 사용합니다. FilterHashtable 매개 변수에 대한 자세한 내용은 FilterHashtable을 사용하여 Get-WinEvent 쿼리 만들기를 참조하세요. 해시 테이블에 대한 자세한 내용은 about_Hash_Tables를 참조하세요.

$Date = (Get-Date).AddDays(-2)
Get-WinEvent -FilterHashtable @{ LogName='Application'; StartTime=$Date; Id='1003' }

이 cmdlet은 Get-Date AddDays 메서드를 사용하여 현재 날짜 2일 전의 날짜를 가져옵니다. date 개체는 변수에 $Date 저장됩니다.

cmdlet은 Get-WinEvent 로그 정보를 가져옵니다. FilterHashtable 매개 변수는 출력을 필터링하는 데 사용됩니다. LogName 키는 이 값을 애플리케이션 로그로 지정합니다. StartTime 키는 변수에 $Date 저장된 값을 사용합니다. ID 키는 이벤트 ID 값 1003을 사용합니다.

예제 18: FilterHashtable을 사용하여 애플리케이션 오류 가져오기

이 예제에서는 FilterHashtable 매개 변수를 사용하여 지난 주 내에 발생한 Internet Explorer 애플리케이션 오류를 찾습니다.

$StartTime = (Get-Date).AddDays(-7)
Get-WinEvent -FilterHashtable @{
  Logname='Application'
  ProviderName='Application Error'
  Data='iexplore.exe'
  StartTime=$StartTime
}

이 cmdlet은 Get-Date AddDays 메서드를 사용하여 현재 날짜 7일 이전의 날짜를 가져옵니다. date 개체는 변수에 $StartTime 저장됩니다.

cmdlet은 Get-WinEvent 로그 정보를 가져옵니다. FilterHashtable 매개 변수는 출력을 필터링하는 데 사용됩니다. LogName 키는 이 값을 애플리케이션 로그로 지정합니다. ProviderName 키는 이벤트의 원본애플리케이션 오류 값을 사용합니다. 데이터 키는 값을 iexplore.exe StartTime 키는 변수에 $StartTime 저장된 값을 사용합니다.

예제 19: SuppressHashFilter를 사용하여 애플리케이션 오류 필터링

위의 예제 16과 마찬가지로 이 예제에서는 FilterHashtable 매개 변수를 사용하여 애플리케이션 로그에서 이벤트를 가져옵니다. 그러나 SuppressHashFilter 키를 추가하여 정보 수준 이벤트를 필터링합니다.

$Date = (Get-Date).AddDays(-2)
$filter = @{
  LogName='Application'
  StartTime=$Date
  SuppressHashFilter=@{Level=4}
}
Get-WinEvent -FilterHashtable $filter

이 예제 Get-WinEvent 에서는 수준 4(정보)를 제외한 지난 2일 동안의 애플리케이션 로그에서 모든 이벤트를 가져옵니다.

매개 변수

-ComputerName

이 cmdlet이 이벤트 로그에서 이벤트를 가져오는 컴퓨터의 이름을 지정합니다. 컴퓨터의 NetBIOS 이름, IP 주소 또는 FQDN(정규화된 do기본 이름)을 입력합니다. 기본값은 로컬 컴퓨터 localhost입니다. 이 매개 변수는 한 번에 하나의 컴퓨터 이름만 허용합니다.

원격 컴퓨터에서 이벤트 로그를 얻으려면 원격 액세스를 허용하도록 이벤트 로그 서비스에 대한 방화벽 포트를 구성합니다.

이 cmdlet은 PowerShell 원격을 사용하지 않습니다. 컴퓨터가 원격 명령을 실행하도록 구성되지 않은 경우에도 ComputerName 매개 변수를 사용할 수 있습니다.

Type:String
Aliases:Cn
Position:Named
Default value:Local computer
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

이 작업을 수행할 권한이 있는 사용자 계정을 지정합니다. 기본값은 현재 사용자입니다.

User01 또는 Do기본01\User01과 같은 사용자 이름을 입력합니다. 또는 cmdlet에서 생성된 개체와 같은 PSCredential 개체를 Get-Credential 입력합니다. 사용자 이름을 입력하면 암호를 입력하라는 메시지가 표시됩니다. 매개 변수 이름만 입력하면 사용자 이름과 암호를 입력하라는 메시지가 표시됩니다.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilterHashtable

하나 이상의 이벤트 로그에서 이벤트를 선택하는 해시 테이블 형식의 쿼리를 지정합니다. 쿼리에는 하나 이상의 키/값 쌍이 있는 해시 테이블이 포함되어 있습니다.

해시 테이블 쿼리에는 다음과 같은 규칙이 있습니다.

  • 키와 값은 대/소문자를 구분하지 않습니다.
  • Wild카드 문자는 LogName 및 ProviderName 키와 연결된 값에서만 유효합니다.
  • 각 키는 각 해시 테이블에 한 번만 나열할 수 있습니다.
  • 경로 값은 경로 .evtx.evt및 로그 파일에 대한 .etl경로를 사용합니다.
  • LogName, Path 및 ProviderName 키는 동일한 쿼리에서 사용할 수 있습니다.
  • UserID 키는 유효한 System.Security.Principal.NTAccount 개체를 생성하는 데 사용할 수 있는 유효한 SID(보안 식별자) 또는 do기본 계정 이름을 사용할 수 있습니다.
  • 데이터 값은 이름 없는 필드에서 이벤트 데이터를 가져옵니다. 예를 들어 클래식 이벤트 로그의 이벤트입니다.
  • <named-data> 키는 명명된 이벤트 데이터 필드를 나타냅니다.

키/값 쌍을 해석할 수 없는 경우 Get-WinEvent 키는 이벤트의 이벤트 데이터에 대/소문자를 구분하는 이름으로 해석합니다.

유효한 Get-WinEvent키/값 쌍은 다음과 같습니다.

  • Logname=<String[]>
  • ProviderName=<String[]>
  • Path=<String[]>
  • 키워드=<Long[]>
  • ID=<Int32[]>
  • 수준=<Int32[]>
  • StartTime=<DateTime>
  • EndTime=<DateTime>
  • UserID=<SID>
  • Data=<String[]>
  • <named-data>=<String[]>
  • SuppressHashFilter=<Hashtable>
Type:Hashtable[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-FilterXml

이 cmdlet이 하나 이상의 이벤트 로그에서 이벤트를 선택하는 구조적 XML 쿼리를 지정합니다.

유효한 XML 쿼리를 생성하려면 Windows 이벤트 뷰어 사용자 지정 보기 만들기 및 현재 로그 필터링 기능을 사용합니다. 대화 상자의 항목을 사용하여 쿼리를 만든 다음 XML 탭을 클릭하여 XML 형식으로 쿼리를 봅니다. XML 탭에서 FilterXml 매개 변수 값으로 XML을 복사할 수 있습니다. 이벤트 뷰어 기능에 대한 자세한 내용은 이벤트 뷰어 도움말을 참조하세요.

XML 쿼리를 사용하여 여러 XPath 문이 포함된 복잡한 쿼리를 만듭니다. XML 형식을 사용하면 쿼리에서 이벤트를 제외하는 SUPPRESS XML 요소를 사용할 수도 있습니다. 이벤트 로그 쿼리에 대한 XML 스키마에 대한 자세한 내용은 이벤트 선택의 쿼리 스키마 및 XML 이벤트 쿼리 섹션을 참조하세요.

FilterHashtable 매개 변수를 사용하여 Suppress 요소를 만들 수도 있습니다.

Type:XmlDocument
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-FilterXPath

이 cmdlet이 하나 이상의 로그에서 이벤트를 선택하는 XPath 쿼리를 지정합니다.

XPath 언어에 대한 자세한 내용은 이벤트 선택의 XPath 참조 및 선택 필터 섹션을 참조하세요.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

다른 이벤트 로그 외에도 디버그 및 분석 로그를 가져옵니다. Force 매개 변수는 이름 매개 변수 값에 wild카드 문자가 포함된 경우 디버그 또는 분석 로그를 가져오는 데 필요합니다.

기본적으로 cmdlet은 Get-WinEvent 디버그 또는 분석 로그의 전체 이름을 지정하지 않는 한 이러한 로그를 제외합니다.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ListLog

이벤트 로그를 지정합니다. 쉼표로 구분된 목록에 이벤트 로그 이름을 입력합니다. 야생카드 허용됩니다. 모든 로그를 얻으려면 별표(*) 와일드카드 사용합니다.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-ListProvider

이 cmdlet이 가져오는 이벤트 로그 공급자를 지정합니다. 이벤트 로그 공급자는 이벤트 로그에 이벤트를 기록하는 프로그램 또는 서비스이며

공급자 이름을 쉼표로 구분된 목록으로 입력합니다. 야생카드 허용됩니다. 컴퓨터의 모든 이벤트 로그 공급자를 얻으려면 별표(*) wild카드를 사용합니다.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-LogName

이 cmdlet에서 이벤트를 가져오는 이벤트 로그를 지정합니다. 쉼표로 구분된 목록에 이벤트 로그 이름을 입력합니다. 야생카드 허용됩니다. 로그 이름을 cmdlet에 Get-WinEvent 파이프할 수도 있습니다.

참고 항목

PowerShell은 요청할 수 있는 로그의 양을 제한하지 않습니다. 그러나 cmdlet은 Get-WinEvent 256으로 제한되는 Windows API를 쿼리합니다. 이렇게 하면 모든 로그를 한 번에 필터링하기가 어려울 수 있습니다. 루프를 사용하여 다음과 같이 각 로그를 foreach 반복하여 이 작업을 수행할 수 있습니다. Get-WinEvent -ListLog * | ForEach-Object{ Get-WinEvent -LogName $_.Logname }

Type:String[]
Position:0
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:True

-MaxEvents

반환되는 최대 이벤트 수를 지정합니다. 정수(예: 100)를 입력합니다. 기본값은 로그 또는 파일의 모든 이벤트를 반환하는 것입니다.

Type:Int64
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Oldest

이 cmdlet은 이벤트를 가장 오래된 순서로 가져옵니다. 기본적으로 이벤트는 최신 순서로 반환됩니다.

이 매개 변수는 디버그 및 .evt 분석 로그와 파일에서 .etl 이벤트를 가져오는 데 필요합니다. 이러한 파일에서 이벤트는 가장 오래된 순서로 기록되며 이벤트는 가장 오래된 순서로만 반환될 수 있습니다.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

이 cmdlet에서 이벤트를 가져오는 이벤트 로그 파일의 경로를 지정합니다. 쉼표로 구분된 목록에 로그 파일의 경로를 입력하거나 야생카드 문자를 사용하여 파일 경로 패턴을 만듭니다.

Get-WinEvent는 , .evtx.etl 파일 이름 확장명을 가진 .evt파일을 지원합니다. 동일한 명령에 다른 파일 및 파일 형식의 이벤트를 포함할 수 있습니다.

Type:String[]
Aliases:PSPath
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-ProviderName

이 cmdlet이 이벤트를 가져오는 이벤트 로그 공급자를 문자열 배열로 지정합니다. 쉼표로 구분된 목록에 공급자 이름을 입력하거나 야생카드 문자를 사용하여 공급자 이름 패턴을 만듭니다.

이벤트 로그 공급자는 이벤트 로그에 이벤트를 기록하는 프로그램 또는 서비스이며 PowerShell 공급자가 아닙니다.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

입력

String

LogName(문자열)을 이 cmdlet으로 파이프할 수 있습니다.

XmlDocument

FilterXML 쿼리를 이 cmdlet으로 파이프할 수 있습니다.

Hashtable

FilterHashtable 쿼리를 이 cmdlet으로 파이프할 수 있습니다.

출력

EventLogConfiguration

ListLog 매개 변수를 사용하여 이 cmdlet은 EventLogConfiguration 개체를 반환합니다.

EventLogRecord

기본적으로 이 cmdlet은 EventLogRecord 개체를 반환합니다.

ProviderMetadata

ListProvider 매개 변수를 사용하여 이 cmdlet은 ProviderMetadata 개체를 반환합니다.

참고

Get-WinEvent 는 Windows Vista 이상 버전의 Windows를 Get-EventLog 실행하는 컴퓨터에서 cmdlet을 대체하도록 설계되었습니다. Get-EventLog 는 클래식 이벤트 로그에서만 이벤트를 가져옵니다. Get-EventLog는 이전 버전과의 호환성을 위해 유지됩니다.

Get-WinEvent Windows PE(Windows 사전 설치 환경)에서는 cmdlet 및 Get-EventLog cmdlet이 지원되지 않습니다.