이벤트 로그가 이미 있는지 확인하는 방법
다음 줄을 사용하여 새 이벤트 로그를 만드는 중입니다.
new-eventlog -LogName "Visual Studio Builds" -Source "Visual Studio"
새 컴퓨터에서 빌드를 실행하는 경우에도 이벤트 로그를 보고 싶기 때문에 매번 이 작업을 실행하려고 합니다.
문제는 로그가 이미 생성된 후 스크립트가 실행될 때마다 오류가 발생한다는 것입니다.
New-EventLog : The "Visual Studio" source is already registered on the "localhost" computer.
At E:\Projects\MyApp\bootstrap.ps1:14 char:13
+ new-eventlog <<<< -LogName "Visual Studio Builds" -Source "Visual Studio"
+ CategoryInfo : InvalidOperation: (:) [New-EventLog], InvalidOperationException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.NewEventLogCommand
이제 이벤트 로그를 "검색"할 수 있음을 알게 되었습니다.
Get-EventLog -list | Where-Object {$_.logdisplayname -eq "Visual Studio Builds"}
하지만 이제 그것이 존재하는지 어떻게 결정합니까?
# Check if Log exists
# Ref: http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.exists(v=vs.110).aspx
[System.Diagnostics.EventLog]::Exists('Application');
# Ref: http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.sourceexists(v=vs.110).aspx
# Check if Source exists
[System.Diagnostics.EventLog]::SourceExists("YourLogSource");
그래서 저는 옳은 길을 가고 있었습니다.Get-EventLog
.
그냥 읽는 대신 변수에 저장했습니다.그런 다음 변수가null
.
이것은 제가 하고 싶었던 일을 성취했습니다.
$logFileExists = Get-EventLog -list | Where-Object {$_.logdisplayname -eq "Visual Studio Builds"}
if (! $logFileExists) {
New-EventLog -LogName "Visual Studio Builds" -Source "Visual Studio"
}
if ([System.Diagnostics.EventLog]::SourceExists("Visual Studio") -eq $False) {
New-EventLog -LogName "Visual Studio Builds" -Source "Visual Studio"
}
확인:Exists
방법:
[System.Diagnostics.EventLog]::Exists('Visual Studio Builds')
존재 여부를 간단히 확인하는 방법
$EventLogName = "LogName"
if ( !($(Get-EventLog -List).Log.Contains($EventLogName)))
{}
그러나 새 항목을 만들려면 "관리자 권한"이 필요합니다.이 문제를 해결하기 위해 하위 프로세스를 호출했습니다.
Start-Process -verb runAs powershell.exe -ArgumentList "-file $PSScriptRoot\CreateLog.ps1" -wait
단순 CreateLog.ps1을 사용하여:
New-EventLog -LogName ScriptCheck -Source ScriptCheck
Write-EventLog –LogName ScriptCheck `
–Source ScriptCheck –EntryType Information –EventID 100 `
–Message "Start logging!"
저는 아래의 접근법이 필터의 작업 부하를 줄일 수 있다고 생각합니다.where
try
{
Get-EventLog -LogName "Visual Studio Builds" -ErrorAction Ignore| Out-Null
}
catch {
New-EventLog -LogName "Visual Studio Builds" -Source "Visual Studio"
}
덜 복잡함:
if (!(Get-Eventlog -LogName "Application" -Source "YourLog")){
New-Eventlog -LogName "Application" -Source "YourLog"
}
이건 저한테 효과가 있었어요.누군가에게 도움이 되길 바랍니다.
$EventLog = "SLAPS"
If ([System.Diagnostics.EventLog]::SourceExists("$EventLog") -eq $false) {
New-EventLog -LogName "SLAPS_PasswordRotation" -Source "$EventLog"
Write-EventLog -LogName "SLAPS_PasswordRotation" -Source "$EventLog" -Message "EventLog Succesfully Created" -EventId 10000 -EntryType SuccessAudit
}
Else {
Write-EventLog -LogName "SLAPS_PasswordRotation" -Source "$EventLog" -Message "New Rotation Started Succesfully" -EventId 1 -EntryType SuccessAudit
}
Get-/Test-Event 로그 소스
그System.Diagnostics
방법이 제한적입니다.컴퓨터에는 소스가 하나만 있을 수 있습니다.서로 다른 시스템은 동일한 원본을 가질 수 있지만 로그는 다를 수 있습니다.제 경험으로는 이러한 방법으로 작업하고 로그 및 소스를 생성/제거한 후 문제가 발생하기 시작했습니다.사용자 정의 로그/소스를 확인하기 위해 다음과 같이 작성했습니다.
Set-StrictMode -Version Latest
function Get-EventLogSource {
[CmdletBinding()]
param(
[string]$LogFile = '*',
[string]$Source = '*'
)
Get-CimInstance -Class Win32_NTEventLOgFile -Verbose:$false | ForEach-Object {
$_logName = $PSItem.FileName
$PSItem.Sources | ForEach-Object {
$oResult = New-Object PSCustomObject -Property @{
Source = $PSItem
LogName = $_logName
} | Select-Object -Property Source, LogName
Write-Output $oResult
}
} | Sort-Object -Property Source | Where-Object { $PSItem.Source -like $Source -and $PSItem.LogName -like $LogFile }
}
function Test-EventLogSource {
[CmdletBinding()]
param(
[string]$LogFile = '*',
[Parameter(Mandatory)]
[string]$Source
)
$_result = Get-EventLogSource -LogFile $LogFile -Source $Source
return ($null -ne $_result)
}
Clear-Host
#Test-EventLogSource -LogFile 'System' -Source '.NET*' -Verbose
#Test-EventLogSource -LogFile 'Application' -Source '.NET*' -Verbose
#Test-EventLogSource -LogFile 'dummy' -Source '.NET*' -Verbose
#Test-EventLogSource -LogFile '*' -Source '.NET*' -Verbose
#Test-EventLogSource -Source '.NET*' -Verbose
#Test-EventLogSource -LogFile 'Application' -Source 'vs' -Verbose
#Test-EventLogSource -LogFile '*' -Source 'vss' -Verbose
#Test-EventLogSource -Source '*power*'
#Get-EventLogSource
#Get-EventLogSource -LogFile 'System' -Source '.NET*' -Verbose | Format-Table
#Get-EventLogSource -LogFile 'Application' -Source '.NET*' -Verbose | Format-Table
#Get-EventLogSource -LogFile 'dummy' -Source '.NET*' -Verbose | Format-Table
#Get-EventLogSource -LogFile '*' -Source '.NET*' -Verbose | Format-Table
#Get-EventLogSource -Source '.NET*' -Verbose | Format-Table
#Get-EventLogSource -LogFile 'Application' -Source 'vs' -Verbose | Format-Table
#Get-EventLogSource -LogFile '*' -Source 'vss' -Verbose | Format-Table
#Get-EventLogSource -Source '*power*'| Format-Table
Get-Win 이벤트 사용
Get-WinEvent -ListProvider * -ErrorAction SilentlyContinue |
Select-Object -Property Name -ExpandProperty LogLinks |
Select-Object -Property Name, LogName |
Sort-Object -Property Name
$SourceExists = [System.Diagnostics.Eventlog]::SourceExists("XYZ")
if($SourceExists -eq $false){
[System.Diagnostics.EventLog]::CreateEventSource("XYZ", "Application")
}
이렇게 하는 것만으로는 충분하지 않습니다.이벤트 소스를 만들었지만,$SourceExists
항상 그럴 것입니다.false
나는 또한 그것을 실행함으로써 테스트했습니다.CreateEventSource
그리고나서Remove-EventLog
제거하지 못했습니다.이벤트 소스를 생성한 후에는 이벤트 소스에 무언가를 기록해야 합니다.실행 후 추가CreateEventSource
.
Write-EventLog -LogName "Application" -Source "XYZ" -EventID 0 -EntryType Information -Message "XYZ source has been created."
(댓글에) 이것을 지적해 준 https://stackoverflow.com/users/361842/johnlbevan 덕분입니다.
언급URL : https://stackoverflow.com/questions/13851577/how-to-determine-if-an-eventlog-already-exists
'bestsource' 카테고리의 다른 글
PowerShell에서 어레이 어레이를 생성하려면 어떻게 해야 합니까? (0) | 2023.07.28 |
---|---|
반복기가 적어도 하나의 요소를 산출하는지 확인하기 위한 원라이너? (0) | 2023.07.28 |
Android Emulator 오류 메시지: "PANIC: 'x86' CPU에 대한 에뮬레이터 엔진 프로그램이 없습니다." (0) | 2023.07.28 |
사전을 컨트롤러에 전달 asp.net mvc (0) | 2023.07.28 |
오라클에서 레코드 유형에 대한 루프를 쓰는 방법 (0) | 2023.07.23 |