1

当我使用下面的脚本时......

$pattern = 'Unable to create Load Balance Manager object!'
$events = Get-WinEvent -ea SilentlyContinue `
-ProviderName "Hyperion Financial Data Quality Management - Task Manager Service"|
Where-Object { $_.TimeCreated -gt [datetime]::now.AddMinutes(-15) -and $_.Message -match $pattern }
$events |Export-Csv D:\Temp.txt  -Encoding Unicode -notype
[System.IO.File]::ReadAllText("D:\Temp.txt") | Out-File D:\Error.txt -Append -Encoding Unicode

我得到了一个 1 KB 大小的 Temp.txt 文件和一个每天都在增加大小但里面没有内容的 Error.txt 文件。

我知道这个脚本运行良好,因为我已经对其进行了测试,但我不明白为什么在没有找到指定模式的情况下它会不断增加 Error.txt 的大小而没有添加任何内容?

还是每隔 15 分钟在每次运行时添加空白行?如果是这种情况,我该如何防止这种情况发生。我只是想确保它应该只添加内容(在发现错误的情况下)而不是每次运行时添加的空白行,这似乎很有误导性。

请建议..!

4

1 回答 1

3

ReadAllText()返回一个空字符串对象,并且由于您使用-Append的是Out-Filecmdlet,error.txt因此每次都会使用此 emtpy-string + 换行符(因为-Append)进行更新。

您可以通过添加检查来测试来自的数据temp.txt是否不为空来解决它。这将首先从管道中删除空字符串对象Out-File。像这样的东西:

[System.IO.File]::ReadAllText("D:\Temp.txt") | ? { $_ } | Out-File D:\Error.txt -Append -Encoding

或者

[System.IO.File]::ReadAllText("D:\Temp.txt") | ? { $_ -ne "" } | Out-File D:\Error.txt -Append -Encoding
于 2014-02-22T11:57:21.190 回答