Wie erstelle ich eine Windows EventLog-Quelle über die Befehlszeile?

166

Ich erstelle eine ASP.NET-Anwendung, die einige Dinge in Windows EventLog protokolliert. Dazu muss zuerst eine Ereignisquelle erstellt werden. Dies erfordert Administratorrechte, sodass ich dies in der ASP.NET-App nicht tun kann.

Gibt es eine mit Windows gebündelte Befehlszeilenanwendung, die eine Ereignisprotokollquelle erstellen kann, oder muss ich meine eigene einführen?

Vilx-
quelle

Antworten:

298

Versuchen Sie "eventcreate.exe"

Ein Beispiel:

eventcreate /ID 1 /L APPLICATION /T INFORMATION  /SO MYEVENTSOURCE /D "My first log"

Dadurch wird ein neues Ereignis erstellen Quelle namens MYEVENTSOURCEunter EreignisprotokollAPPLICATION als Ereignis Typ .INFORMATION

Ich denke, dieses Dienstprogramm ist nur ab XP enthalten.

Weiterführende Literatur

MSV Muthu
quelle
13
Sie müssen mit der rechten Maustaste auf "cmd" klicken und "Ausführen als Administrator" von Vista on auswählen
Ian Ringrose
16
eventcreate zeichnet ein Ereignis unter einer vorhandenen Quelle auf. Es wird keine neue Quelle von Grund auf neu erstellt, wie vom OP angefordert.
Paul Chavez
5
@PaulChavez Wenn die angegebene Quelle nicht vorhanden ist, wird sie erstellt.
Farinha
1
Dies wird das Ereignis nicht erstellen, wenn das MYEVENTSOURCEbereits vorhanden ist und mit etwas anderem als eventcreate erstellt wurde
Chris S
2
Während dies funktionierte und eine neue Quelle erstellte, hatten alle meine Ereignisse "Die Beschreibung für Ereignis-ID 0 von der Quelle myApp kann nicht gefunden werden. Entweder ist die Komponente, die dieses Ereignis auslöst, nicht auf Ihrem lokalen Computer installiert oder die Installation ist beschädigt", so hatte ich um die Registrierung am Ende zu bearbeiten
dibs487
176

Probieren Sie die EventLog-Cmdlets von PowerShell 2.0 aus

Wirf dies für PowerShell 2.0 und höher ein:

  • Führen Sie New-EventLogeinmal die Ereignisquelle zu registrieren:

    New-EventLog -LogName Application -Source MyApp
    
  • Verwenden Sie dann Write-EventLog, um in das Protokoll zu schreiben:

    Write-EventLog 
        -LogName Application 
        -Source MyApp 
        -EntryType Error 
        -Message "Immunity to iocaine powder not detected, dying now" 
        -EventId 1
    
roufamatisch
quelle
7
Dies funktioniert einwandfrei. Denken Sie jedoch daran, PowerShell mit erhöhten Berechtigungen auszuführen.
Rod
4
Ich musste die Ereignisanzeige öffnen und schließen, um das neue Protokoll zu sehen, das ich erstellt habe
amackay11
Auch wenn Sie sind aktiv an der Entwicklung und New-EventLog-ing und Remove-EventLog‚-ing hin und her könnte ein Problem auftritt , wenn Sourceregistriert, aber nicht schreiben zu spezifiziert Log. Ein Neustart des Computers hilft dabei. Ein weiterer Tipp: Sie können hier sehen, was mit Ihren Ereignisprotokollen mit regedit los ist:[Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\]
Corio
44

Sie können Windows PowerShell auch mit dem folgenden Befehl verwenden:

if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
    [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
}

Stellen Sie sicher, dass die Quelle nicht vorhanden ist, bevor Sie CreateEventSource aufrufen. Andernfalls wird eine Ausnahme ausgelöst.

Für mehr Information:

Luis Rocha
quelle
12

Mit eventcreate2 können Sie benutzerdefinierte Protokolle erstellen, bei eventcreate nicht.

Nick Bolton
quelle
4

Wenn jemand interessiert ist, ist es auch möglich, eine Ereignisquelle manuell zu erstellen, indem einige Registrierungswerte hinzugefügt werden.

Speichern Sie die folgenden Zeilen als REG-Datei und importieren Sie sie durch Doppelklick in die Registrierung:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\YOUR_EVENT_SOURCE_NAME_GOES_HERE]
"EventMessageFile"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\EventLogMessages.dll"
"TypesSupported"=dword:00000007

Dadurch wird eine Ereignisquelle mit dem Namen erstellt YOUR_EVENT_SOURCE_NAME_GOES_HERE.

CSharper
quelle
1

Oder verwenden Sie einfach den Befehlszeilenbefehl:

Eventcreate


quelle
1

Die Cmd / Batch-Version funktioniert jedoch. Sie können auf ein Problem stoßen, wenn Sie eine Ereignis-ID definieren möchten, die höher als 1000 ist. Für die Ereigniserstellung mit einer Ereignis-ID von 1000+ verwende ich Powershell wie folgt:

$evt=new-object System.Diagnostics.Eventlog(“Define Logbook”)
$evt.Source=”Define Source”
$evtNumber=Define Eventnumber
$evtDescription=”Define description”
$infoevent=[System.Diagnostics.EventLogEntryType]::Define error level
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber) 

Stichprobe:

$evt=new-object System.Diagnostics.Eventlog(“System”)
$evt.Source=”Tcpip”
$evtNumber=4227
$evtDescription=”This is a Test Event”
$infoevent=[System.Diagnostics.EventLogEntryType]::Warning
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber)
R. Tettero
quelle
-3

Sie können Ihr eigenes benutzerdefiniertes Ereignis mithilfe von diagnostics.Event-Protokollklasse erstellen. Öffnen Sie eine Windows-Anwendung und klicken Sie auf eine Schaltfläche, um den folgenden Code auszuführen.

System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "MyNewLog");

"MyNewLog" bezeichnet den Namen, den Sie Ihrer Anmeldeereignisanzeige geben möchten.

Weitere Informationen finden Sie unter diesem Link [ http://msdn.microsoft.com/en-in/library/49dwckkz%28v=vs.90%29.aspx]

3333
quelle