首页 > 解决方案 > 日志文件格式被搞砸了

问题描述

我有一个由预定的 ps1 脚本生成的日志文件。当它只是向文件写入行时它工作正常,但现在当我包含一些文件操作时,它有一些弄脏/弄脏的格式,导致执行无法正确运行。

下图的前两行是我希望如何查看和处理文件,最后两行是它现在如何做的示例。

在此处输入图像描述

因此,删除前一条记录的 X 无效:

$bootTime = (Get-WmiObject Win32_OperatingSystem).LastBootUpTime
$formBootTime = [Management.ManagementDateTimeConverter]::ToDateTime($bootTime)
$file = Get-Content c:\myUptimeLogFile.txt
$fileMeasure = ($file | Measure-Object)
$numberOfLines = $fileMeasure.Count
$numberOfWords = ($file | Select -Index ($numberOfLines -1) | Measure-Object -Word)
$Line = $file | Select -Index ($numberOfLines -2)
$Line.Split(",")
$wordArray = $Line.Split(",")
$LastLineBT = $wordArray[0]
if ($LastLineBT -eq $formBootTime) {
    $unmark = "true"
} else {
    $unmark = "false"
}

if($unmark -eq "true") {
    $output = "C:\myUptimeLogFile_NEW.txt"

    $file[-2] = $file[-2] -replace 'X', ' '
    $file | Set-Content $output -Encoding ASCII
    Remove-Item -Path "C:\myUptimeLogFile_SBY.txt"
    Rename-Item -Path "C:\myUptimeLogFile.txt" -NewName "C:\myUptimeLogFile_SBY.txt"
    Rename-Item -Path "C:\myUptimeLogFile_NEW.txt" -NewName "C:\myUptimeLogFile.txt"
}

$uptime = (Get-Date) - $formBootTime
"$formBootTime,$(Get-Date),{0:00},{1:00},{2:00},{3:00},X" -f $uptime.Days,$uptime.Hours,$uptime.Minutes,$uptime.Seconds >> C:\myUptimeLogFile.txt

在此处输入图像描述

如果这$unmarked是真的,那就是文件随机播放并且格式明显改变的时候。在那之前,>>使用正确的格式。

根据评论,检查Add-Content代码的最后一行。

更新 - 解决方案:

$newLine = "$formBootTime,$(Get-Date),{0:00},{1:00},{2:00},{3:00},X" -f $uptime.Days,$uptime.Hours,$uptime.Minutes,$uptime.Seconds

Add-Content -Path "C:\TestLog1.txt" -Value $newLine -Encoding "ASCII"

标签: powershell

解决方案


推荐阅读