2016-04-01 10 views
1

Beim Ausführen des folgenden Motto:Write-EventLog für Fehler

Write-EventLog -LogName Application -Source 'Application Error' -EntryType Error -EventID 1001 -Message 'Problem description' 

Wir sehen den Eintrag im Protokoll Application:

enter image description here

Nach Microsoft für EventID 1001, sollte man zur Verfügung stellen die Werte für% 1,% 2 und% 3:

Erkennung des Produkts '% 1 ', Merkmal'% 2 'fehlgeschlagen bei Anforderung für Komponente'% 3 '

Wie ist das in PowerShell möglich? Wenn Sie den Schalter Hinzufügen -RawData 10, 20 nur die Art gefüllt ist, wie folgend:

enter image description here

Gibt es eine Möglichkeit, den anderen Text nicht zur Verfügung zu haben, ohne sich einzuloggen einen neuen Protokollnamen oder Quelle in der Event zu schaffen? Oder die Variablen ausfüllen zu können? Ich schreibe an Application error für den Fall, dass der benutzerdefinierte Protokollname oder -quelle nicht verfügbar ist. Da ist also irgendwo eine Spur.

Vielen Dank für Ihre Hilfe.

+0

EventID 1001 von MSI und EventID 1001 von Application Error oder Windows Error Reporting ist nicht das gleiche Ereignis - die Quelle zählt. Ändern Sie es in 'MsiInstaller' und Sie werden sehen –

+0

Danke Mathias Ich verstehe es jetzt. Welche Quelle ist immer verfügbar und am besten zum Melden von benutzerdefinierten Fehlern? Wenn man zufällig eine andere Nummer wählt, um den zusätzlichen Fuzz zu vermeiden, klagt es immer über 'Die Beschreibung für Event ID xxx kann nicht gefunden werden ...' – DarkLite1

Antwort

1

Die Beschreibung der Ereignis-ID 1001, auf die Sie verweisen, ist spezifisch für die Quelle MsiInstaller.

Verwenden Sie für benutzerdefinierte Fehlerereignisse eine benutzerdefinierte Quellenkennung. Sie können prüfen, ob eine Quellendefinition auf der Maschine bereits vorhanden ist, und wenn nicht, schaffen es:

$CustomSource = 'MyCustomApplication' 

# Wrap check i try/false to catch SourceExists() throwing access denied on failure 
$SourceExists = try { 
    [System.Diagnostics.EventLog]::SourceExists($CustomSource) 
} catch { 
    $false 
} 

if(-not $SourceExists) 
{ 
    # Create the Source definition 
    New-EventLog -Source $CustomSource -LogName Application 
} 

Write-EventLog -LogName Application -Source $CustomSource -EntryType Error -EventID 1001 -Message 'Problem description' 

Wenn Sie eine Nachricht Ressourcendatei (die Datei, die die „Vorlagen“ für Ihre Veranstaltungen enthält), können Sie auch Dazu gehören die im New-EventLog

+0

Danke Mathias, ich mache das schon via SCCM und dem System account. Aber später, wenn ich ein Skript mit dem Benutzerkonto ausführe, sollte es fehlschlagen, wenn die benutzerdefinierte Quelle nicht ordnungsgemäß mit dem Systemkonto erstellt wurde. In diesem Fall möchte ich, dass der Benutzer eine Nachricht in das Ereignisprotokoll schreibt. Der Benutzer kann kein benutzerdefiniertes Protokoll verwenden, sondern sollte etwas verwenden, das bereits verfügbar ist ... Hoffentlich wird dies klarer? – DarkLite1

+0

@ DarkLite1 Warum ist es so wichtig, dass es etwas "bereits verfügbares" verwendet? Solange sich der von Ihnen gewählte Quellenname von dem unterscheidet, den SCCM erstellt haben soll, können Sie dennoch problemlos zwischen ihnen unterscheiden. Was versuchst du zu erreichen? –

+0

Ich versuche, eine saubere Fehlermeldung im 'Application'-Protokoll zu erreichen, ohne zusätzliche Extras wie' Die Beschreibung für Event ID ist unbekannt' oder einen anderen Text wie 'Fault bucket'. Warum? Weil es zu diesem Zeitpunkt noch kein benutzerdefiniertes Protokoll gibt (der Benutzer kann das nicht erstellen) und es muss irgendwo hingehen ... – DarkLite1