我正在运行此命令来提取日志文件的最后一行:
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
日志的结果。
答案 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文件。