我将日志文件中的一些错误提取到一个单独的文件中。
我正在搜索的错误在一个小块中定义:
# Define all the error types that we need to search on
$error_6 = "Missing coded entry in table for provider sector category record"
$error_7 = "not a well-formed email address"
$error_8 = "Org Id must not contain invalid characters"
$error_9 = "Missing sub type code for provider type category record"
$error_10 = "Provider sub type"
然后我在源日志文件中读取并删除匹配的行。
奇怪的是,如果我将它们转储到单独的文件中,我会在每个文件中获得正确的行数,但如果我使用相同的文件,我只会获得一行。我以为它会附加到文件中。
这不起作用(只有一行输出):
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_6 } | Set-Content $path\known_errors.log
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_7 } | Set-Content $path\known_errors.log
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_8 } | Set-Content $path\known_errors.log
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_9 } | Set-Content $path\known_errors.log
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_10 } | Set-Content $path\known_errors.log
Works(共16行输出):
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_6 } | Set-Content $path\known_errors_6.log
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_7 } | Set-Content $path\known_errors_7.log
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_8 } | Set-Content $path\known_errors_8.log
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_9 } | Set-Content $path\known_errors_9.log
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_10 } | Set-Content $path\known_errors_10.log
答案 0 :(得分:3)
Set-Content
始终创建一个新文件。
https://technet.microsoft.com/en-us/library/hh849828.aspx
设置-内容
使用新内容写入或替换项目中的内容。
您需要使用Add-Content
将数据添加到现有文件中。
https://technet.microsoft.com/en-us/library/hh849859.aspx
添加-内容
将内容添加到指定的项目,例如添加单词 到文件。
答案 1 :(得分:1)
或者您可以使用:
(Get-Content $path\temp_report.log) | Where-Object { $_ -match $error_6 } | out-file $path\known_errors.log -Append