2017-03-08 3 views
0

Ich versuche, Windows-Ereignisprotokolle zu analysieren, um jede Software aufzulisten, die auf einem Gerät und von wem deinstalliert wurde. HierWie erhält man den Benutzernamen des Benutzers, der eine Anwendung unter Windows deinstalliert hat?

ist, was ich kam mit bisher:

  • Spiel auf Ereignisse 1040 (applciation deinstallieren):

PowerShell -ExecutionPolicy ByPass -Command "Get-WinEvent -FilterHashTable @{logname=’application’; id=1040; StartTime=(get-date).AddDays(-1)} | select timecreated, level, id, message, ProviderName, User | Export-Csv -Append C:\BCM\eventerr.csv -notype" 
  • erhalten die "User" gegeben in das Ereignis:

Get-WinEvent -MaxEvents 10 | foreach { 
     $sid = $_.userid; 
     if($sid -eq $null) { return; } 
     $objSID = New-Object System.Security.Principal.SecurityIdentifier($sid); 
     $objUser = $objSID.Translate([System.Security.Principal.NTAccount]); 
     Write-Host $objUser.Value; 
    } 

Aber es beginnt mit einem Fehler outputing:

Error: Attempted to perform an unauthorized operation.. At line:1 char:1 + Get-WinEvent -MaxEvents 10 | foreach { + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Get-WinEvent], Exception + FullyQualifiedErrorId : LogInfoUnavailable,Microsoft.PowerShell.Commands.GetWinEvent‌​Command

Dann gibt es eine Liste von 2 Benutzern ...

EDIT: die folgenden ist nutzlos, da ich da, dass die realisierte zweite Befehlszeile nicht (immer?) ein richtiges Ergebnis ausgeben ...

Ich habe versucht, diese wie folgt zu kombinieren:

PowerShell -ExecutionPolicy ByPass -Command "Get-WinEvent -MaxEvents 10 -FilterHashTable @{logname=’application’; id=1040; StartTime=(get-date).AddDays(-1)} | select timecreated, level, id, message, ProviderName, User | foreach {$sid = $_.userid; if($sid -eq $null) { return; } $objSID = New-Object System.Security.Principal.SecurityIdentifier($sid); $objUser = $objSID.Translate([System.Security.Principal.NTAccount]); Write-Host $objUser.Value;}| Export-Csv -Append C:\BCM\eventerr.csv -notype" 

Aber ich diesen Fehler in der Powershell-Fenster:

At line:1 char:325 + ... rityIdentifier(); AD\user = S-1-5-21-935981524-3360503449-101602611-2988 ... + ~ An expression was expected after '('. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : ExpectedExpression

Kann mir jemand helfen, dass beheben bitte?

Vielen Dank im Voraus :)

+0

Eine Sache falsch ein Semikolon fehlt nach 'if ($ sid -eq $ null) {return; } ', – BenH

+0

Haben Sie Ihren Kommentar sodaillow gelöscht? Ich bin nicht viel an Powershell gewöhnt, warum wäre es einfacher zu debuggen, wenn es in einer Datei war? – druid

+0

Tatsächlich erkannte ich, dass die zweite Befehlszeile nur teilweise funktioniert: Get-WinEvent: konnte Informationen über das Sicherheitsprotokoll nicht abrufen. Fehler: Es wurde versucht, einen nicht autorisierten -Vorgang auszuführen. Bei Zeile: 1 Zeichen: 1 + Get-WinEvent -MaxEvents 10 | foreach { + ~~~~~~~~~~~~~~~~~~~~~ + KategorieInfo: NotSpecified: (:) [Get-WinEvent], Ausnahme + FullyQualifiedErrorId: LogInfoUnavailable, Microsoft.PowerShell.Commands.GetWinEventCommand Dann gibt es eine Liste von 2 Benutzern ... – druid

Antwort

0

Ihre beiden Funktionen kombiniert Ist hier:

Get-WinEvent -FilterHashTable @{logname='application'; id=1040; StartTime=(get-date).AddDays(-10)} | % { 
    $objSID = New-Object System.Security.Principal.SecurityIdentifier ($_.userid) 
    $objUser = $objSID.Translate([System.Security.Principal.NTAccount]) 
    [pscustomobject]@{ 
     User = $objUser.Value 
     timecreated = $_.timecreated 
     level = $_.level 
     id = $_.id 
     message = $_.message 
     ProviderName = $_.ProviderName 
    } 
} | Export-Csv -Append C:\BCM\eventerr.csv -notype 

Und hier ist es als extrem lange oneliner:

PowerShell -ExecutionPolicy ByPass -Command "Get-WinEvent -FilterHashTable @{logname='application'; id=1040; StartTime=(get-date).AddDays(-10)} | % {$objSID = New-Object System.Security.Principal.SecurityIdentifier ($_.userid); $objUser = $objSID.Translate([System.Security.Principal.NTAccount]);[pscustomobject]@{User = $objUser.Value;timecreated = $_.timecreated;level = $_.level;id = $_.id;message = $_.message;ProviderName = $_.ProviderName}} | Export-Csv -Append C:\BCM\eventerr.csv -notype" 
+0

Danke, aber es funktioniert nicht an meinem Ende. Wenn ich Ihren ersten Befehl verwende, gibt es folgendes aus: New-Object: Ein Konstruktor wurde nicht gefunden. Es wurde kein geeigneter Konstruktor für den Typ System.Security.Principal.SecurityIdentifier gefunden. Bei Zeile: 2 Zeichen: 15 + ... $ objSID = New-Objekt System.Security.Principal.SecurityIdentifier (... + ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (:) [Neu -object], PSArgumentException + FullyQualifiedErrorId: CannotFindAppropriateCtor, Microsoft.PowerShell.Commands.NewObjectCommand – druid

+0

Wo der zweite diese Ausgänge: =: der Begriff '=' erkannt wird nicht als Name eines Cmdlets, Funktion, Skriptdatei oder programmierbares Programm Überprüfen Sie die Schreibweise des Namens, oder wenn ein Pfad enthalten war, überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut At-Zeile: 1 Zeichen: 176 + ... ct System.Security.Principal.SecurityIdentifier (.userid); = .Transl ... + ~ + CategoryInfo: ObjectNotFound: (=: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException – druid

+0

@druid 'System.Security.Principal.SecurityIdentifier' gibt es schon seit .Net 2.0. Auf welchem ​​Betriebssystem und welcher Version von PowerShell läuft dies? – BenH

Verwandte Themen