2016-05-05 12 views
1

Ich habe ein Skript, um die letzten 30 Einträge für die Ereignisprotokolle Application und System zu lesen. Derzeit funktioniert das Skript nur auf meinem Rechner und gibt nur eine Teilnachricht aus (siehe unten zum Beispiel).Arbeiten mit Windows-Ereignisprotokollen in PowerShell

411905 Mai 05 15:05 Information Microsoft-Windows ... 1501 Die Gruppenrichtlinieneinstellungen für den Benutzer wurden erfolgreich verarbeitet. Es gab keine seit der letzten succ erfassten Änderungen ...

Kann mir jemand sagen, wie die folgende können

  1. Verwendung dieses für Remote-Computer durchgeführt werden - Ich habe versucht, im Format von den Computernamen eingeben \ Domäne \ Computername, aber funktioniert nicht
  2. Wie kann ich die vollständige Nachricht anzeigen und nicht nur ein Abschnitt
  3. Wie kann ich die Datei mit dem Computernamen als Teil des Dateinamens z „Mycomputer Anwendung log.txt“

Mein Skript ist so weit wie diese

Get-EventLog -LogName Application -Newest 30 -ComputerName MYCOMPUTER | Out-File -FilePath "D:\Test\Application Event Logs.txt" 

Get-EventLog -LogName System -Newest 30 -ComputerName MYCOMPUTER | Out-File -FilePath "D:\Test\System Event Logs.txt" 

: Ich bin zu Scripting und dachte, das ein nützliches Skript zu haben sein könnte, aber ich kann nicht bekommen zu Arbeit.

Antwort

3

Fern Computer

Wenn Sie Computer in einer anderen Domäne bedeuten, dann denke ich nicht, dass Sie das Cmdlet allein verwendet werden.

Stattdessen können Sie PowerShell-Remoting verwenden, um alle Powershell-Befehle auszuführen, die auf dem Remotecomputer vorhanden sind. Aber Sie haben remotin die Remote-Maschine gon einzurichten, und verwenden Sie SSL oder vertrauenswürdige Hosts, mit expliziten Anmeldeinformationen die Verbindung zu gewährleisten, erlaubt sein:

$credential = Get-Credential # enter credentials for remote machine 
$session = New-PSSession -ComputerName REMOTECOMPUTER -Credential $credential 
Invoke-Command -Session $session -ScriptBlock { 
    Get-EventLog # parameters 
} 

Der vollständige Text

Es ist wichtig zu beachten, dass, was wird zurückgegeben von Get-WinEvent ist ein komplexes Objekt. Was Sie sehen, wenn es auf dem Bildschirm angezeigt wird, ist nur eine Ansicht. Es direkt in eine Datei zu schreiben ist auch nur eine Ansicht. Ermitteln Sie stattdessen explizit, was Sie möchten, erstellen Sie eine Zeichenfolge, und schreiben Sie sie in eine Datei.

starten, indem das Ergebnis des Cmdlets einer Variablen zugewiesen, so dass Sie es überprüfen:

$events = Get-WinEvent #params 

Jetzt können Sie die Ergebnisse betrachten können:

$events | Get-Member # see what properties are available 

So können Sie sehen, dass Message ist eine Eigenschaft.

nur die Nachricht zu bekommen, Sie Select-Object verwenden können und da Sie es als String und nicht eine Eigenschaft möchten, können Sie -ExpandProperty:

$events | Select-Object -ExpandProperty Message | Out-File #etc 

, dass die Nachrichten würden alle schreiben (aber keine andere info) .

In der Praxis sollten Sie auf jedem Protokolleintrag für den Betrieb zurückgegeben und die Zeichenfolge bauen in die Datei zu schreiben:

$events | ForEach-Object { 
    # $_ represents the current object 
    $msg = $_.Message 
    $id = $_.Id 
    $timeCreated = $_.TimeCreated 

    "A log entry with ID $id was created at $timeCreated, and it says:`r`n`r`n$msg`r`n---------`r`n" 
} | Out-File #params 

Mit dem Computername

Angenommen, Sie kennen den Namen des Computers‘ Überprüfen Sie im Voraus, fügen Sie es in eine Variable ein, dann betten Sie es in den Dateinamen ein:

+0

Danke, ich hätte sagen sollen, dass die Computer auf der gleichen Domäne sind – noelmm