从文本文件

时间:2017-10-20 15:20:16

标签: powershell

我正在运行此命令来提取日志文件的最后一行:

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

结果确实给了我最后一行,但现在我需要过滤结果:

  

10/20/2017 12:38:56 PM信息[事件]:[JobEnd],[JobId]:[70b82296-b6e2-4539-897d-c46384619059],[时间]:[10/20/2017 12 :38:49.074],[FilesCreated]:[0],[BytesProcessed]:[0],[ObjectsProcessed]:[34],[TotalExpectedSPObjects]:[34],[TotalErrors]:[19],[TotalWarnings]: [3],[TotalRetryCount]:[0],[MigrationType]:[None],[MigrationDirection]:[Import],[CreatedOrUpdatedFileStatsBySize]:[{}],[ObjectsStatsByType]:[{" SPUser&#34 ;:{"计数":1," TOTALTIME":0," AccumulatedVersions":0," ObjectsWithVersions":0},&# 34; SPFolder":" Count":4," TotalTime":629," AccumulatedVersions":0," ObjectsWithVersions":0 }," SPDocumentLibrary":"计数":1," TOTALTIME":68," AccumulatedVersions":0," ObjectsWithVersions&# 34;:0}," SPFILE" {"计数":13," TOTALTIME":0," AccumulatedVersions":0,& #34; ObjectsWithVersions":0}," SPListItem" {"计数":16," TOTALTIME ":2240," AccumulatedVersions":0," ObjectsWithVersions":0}}],[CorrelationId]:[7bbf249e-701a-4000-8eee-c4a7ef172063]

我需要能够提取以下内容并导出为CSV:

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

有人可以就如何完成此事给我一些想法吗? 我正在进行OneDrive 4 Business迁移,需要为几千名用户提取Get-SPOMigrationJobProgress日志的结果。

3 个答案:

答案 0 :(得分:1)

需要在那里添加其他字段,然后使用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

答案 1 :(得分:0)

您可以使用拆分并获取所需的字段。

$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"

答案 2 :(得分:0)

您可以使用正则表达式转到所需的字段,然后从每个匹配项创建一个psobject:

$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]}} }

您可以使用Where-Object过滤生成的对象集合,并使用Export-Csv将结果转换为csv文件。