覆盖输出文件?

时间:2016-07-16 18:28:21

标签: file powershell append

我将日志文件中的一些错误提取到一个单独的文件中。

我正在搜索的错误在一个小块中定义:

# 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

2 个答案:

答案 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