2017-10-20 3 views
0

Ich bin mit diesem Befehl wird die letzte Zeile einer Protokolldatei ziehen:Parsen Informationen aus einer Textdatei

Get-Content c:\temp\MigrationJobStatus-20171020-123839-515.log | 
    Select-Object -Last 1 

Die Ergebnisse geben mir die letzte Zeile, aber jetzt brauche ich die Ergebnisse filtern:

10/20/2017 12:38:56 PM Informationen [Veranstaltung]: [JobEnd], [JobId]: [70b82296-b6e2-4539-897d-c46384619059], [Uhrzeit]: [10/20/2017 12: 38: 49.074], [Dateien erstellt]: [0], [BytesProcessed]: [0], [ObjectsProcessed]: [34], [TotalExpectedSPObjects]: [34], [TotalErrors]: [19], [TotalWarnings ]: [3], [TotalRetryCount]: [0], [Migrationstyp]: [Keine], [Migrationsrichtlinie]: [Importieren] , [CreatedOrUpdatedFileStatsBySize]: [{}], [ObjectsStatsByType]: [{"SPUser": {"Count": 1, "TotalTime": 0, "AccumulatedVersions": 0, "ObjectsWithVersions": 0}, "SPFolder": "Count": 4, "TotalTime": 629, "AkkumulierteVersionen": 0, "ObjectsWithVersions": 0}, "SPDocumentLibrary": "Count": 1, "TotalTime": 68, "AccumulatedVersions": 0, "ObjectsWithVersions" : 0}, "SPFile": {"Count": 13, "TotalTime": 0, "AkkumulierteVersionen": 0, "ObjectsWithVersions": 0}, "SPListItem": {"Count": 16, "TotalTime": 2240 "AccumulatedVersions": 0, "ObjectsWithVersions": 0}}], [CorrelationId]: [7bbf249e-701a-4000-8eee-c4a7ef172063]

ich muss in der Lage, die folgenden und den Export in CSV ziehen :

 
[JobId]: [70b82296-b6e2-4539-897d-c46384619059] 
[FilesCreated]: [0] 
[BytesProcessed]: [0] 
[ObjectsProcessed]: [34] 
[TotalExpectedSPObjects]: [34] 
[TotalErrors]: [19] 
[TotalWarnings]: [3] 

Kann mir jemand ein paar Ideen geben, wie das geht? Ich mache eine OneDrive 4 Business-Migration und muss die Ergebnisse des Protokolls Get-SPOMigrationJobProgress für einige tausend Benutzer abrufen.

+0

Ich habe keine Möglichkeit zu testen, aber Sie können versuchen, Get-SPOMigrationJobProgress-nologfile | export-csv. \ mylogfile.csv -notypeinformation' oder etwas in diesem Sinne. – brendan62269

+0

Nein, das funktioniert nicht. – Chabango

Antwort

1

Need andere Felder dort hinzufügen und dann Ergebnisse Out-File

$results = "" 
$fields = @("[JobId]", "[FilesCreated]") 
$items = get-content c:\temp\MigrationJobStatus-20171020-123839-515.log | select-object -last 1 | %{ $_.Split(",")} 
foreach($item in $items) 
{ 
    $field = ($item.Split(":")[0]).Trim() 
    if($fields.Contains($field)) { $results+= "$item`r`n" } 
} 

Write-Host $results 
0

Sie können Split mit speichern verwenden und die Felder greifen Sie benötigen.

$text = get-content c:\temp\MigrationJobStatus-20171020-123839-515.log | select-object -last 1 

$text = ($text -split ",").Trim(" ") 
$csvtext = @" 
$($text[3]) 
$($text[4]) 
$($text[5]) 
$($text[6]) 
$($text[7]) 
$($text[8]) 
"@ 

$csvtext | Out-File ".\logfile.csv" 
0

Sie können auf die Felder, die Sie mithilfe von regulären Ausdrücken möchten und erstellen Sie dann eine psobject aus jedem Spiel:

$regexPattern = '\[([^]]+)\]: \[([^]]+)\]' 
$result = Get-Content c:\temp\MigrationJobStatus-20171020-123839-515.log | 
    Select-Object -Last 1 | 
    Select-String -Pattern $regexPattern -AllMatches | 
    ForEach-Object { $_.Matches.Value } | 
    ForEach-Object { $_ -match $regexPattern | 
        Select-Object @{n='Name';e={$Matches[1]}},@{n='Value';e={$Matches[2]}} } 

Sie können die resultierende Objektsammlung mit Where-Object filtern nach unten und verwenden Export-Csv zu Holen Sie sich Ihr Ergebnis in eine CSV-Datei.

+0

Danke Manuel. Wenn ich einen PsoBect erzeuge, was verwende ich als Variable? $ object = [pscustobject] {JobID = $ ???? FilesCreated = $ ???}. Danke – Chabango

+0

@Chabango Mit dem obigen Beispiel würden Sie eine Sammlung von Objekten in der Variablen $ result finden. –

Verwandte Themen