webentwicklung-frage-antwort-db.com.de

So können Sie feststellen, ob bereits ein EventLog vorhanden ist

Ich verwende die folgende Zeile, um ein neues Ereignisprotokoll zu erstellen

new-eventlog -LogName "Visual Studio Builds" -Source "Visual Studio"

Ich möchte dies jedes Mal ausführen, denn wenn ich einen Build von einem neuen Computer aus ausführen möchte, würde ich trotzdem die Ereignisprotokolle sehen.

Das Problem ist, dass jedes Mal, wenn das Skript ausgeführt wird, nachdem das Protokoll bereits erstellt wurde, ein Fehler ausgegeben wird.

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

Jetzt weiß ich, dass ich nach dem Ereignisprotokoll suchen kann

Get-EventLog -list | Where-Object {$_.logdisplayname -eq "Visual Studio Builds"} 

Aber wie kann ich jetzt feststellen, ob es existiert?

31
Chase Florell

Also war ich mit Get-EventLog auf dem richtigen Weg.

Anstatt es nur zu lesen, habe ich es in einer Variablen gespeichert. Dann habe ich überprüft, ob die Variable null war.

Das hat erreicht, was ich wollte.

$logFileExists = Get-EventLog -list | Where-Object {$_.logdisplayname -eq "Visual Studio Builds"} 
if (! $logFileExists) {
    New-EventLog -LogName "Visual Studio Builds" -Source "Visual Studio"
}
24
Chase Florell
# 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");
34

Überprüfen Sie die Exists-Methode:

[System.Diagnostics.EventLog]::Exists('Visual Studio Builds')
11
Shay Levy

if ([System.Diagnostics.EventLog]::SourceExists("Visual Studio") -eq $False) { New-EventLog -LogName "Visual Studio Builds" -Source "Visual Studio" }

11
Sean Webb

Um einfach zu prüfen, ob es existiert:

$EventLogName = "LogName"
if ( !($(Get-EventLog -List).Log.Contains($EventLogName)))
{}

Um das neue zu erstellen, benötigen Sie jedoch das Privileg "Als Administrator". Um dieses Problem zu lösen, rief ich einen Unterprozess an:

Start-Process -verb runAs powershell.exe  -ArgumentList "-file $PSScriptRoot\CreateLog.ps1" -wait

Mit einfachen CreateLog.ps1:

New-EventLog -LogName ScriptCheck -Source ScriptCheck
Write-EventLog –LogName ScriptCheck `
–Source ScriptCheck –EntryType Information –EventID 100 `
–Message "Start logging!"
3
StanislavT.

Ich denke, der folgende Ansatz könnte die Arbeitslast des Filters mit where reduzieren.

    try
    {
        Get-EventLog -LogName "Visual Studio Builds" -ErrorAction Ignore| Out-Null
    }
    catch {
        New-EventLog -LogName "Visual Studio Builds" -Source "Visual Studio"
    }
2
Jackie

Weniger komplex:

 if (!(Get-Eventlog -LogName "Application" -Source "YourLog")){
      New-Eventlog -LogName "Application" -Source "YourLog"
 }
1
pwrshll
$SourceExists = [System.Diagnostics.Eventlog]::SourceExists("XYZ")
if($SourceExists -eq $false){
    [System.Diagnostics.EventLog]::CreateEventSource("XYZ", "Application")
}

Dies zu tun reicht nicht aus. Auch wenn Sie die Ereignisquelle erstellt haben, ist $SourceExists immer false. Ich habe es auch getestet, indem ich CreateEventSource und dann Remove-EventLog ausgeführt habe und das Entfernen fehlgeschlagen ist. Nachdem Sie eine Ereignisquelle erstellt haben, müssen Sie etwas dazu schreiben. Hängen Sie dies an, nachdem Sie CreateEventSource ausgeführt haben.

Write-EventLog -LogName "Application" -Source "XYZ" -EventID 0 -EntryType Information -Message "XYZ source has been created."

Vielen Dank an https://stackoverflow.com/users/361842/johnlbevan , um dies herauszufinden (in den Kommentaren).

0
Tyler Montney