使用PowerShell从CSV文件中删除行

3

我有一个包含日志信息的CSV文件,其中日期/时间信息以UNIX时间戳格式写入。

我想删除所有早于5分钟的行。我使用以下代码来完成此操作:

$FiveMinutesAgo=(Get-Date ((get-date).toUniversalTime()) -UFormat +%s).SubString(0,10)-300
$Content = Import-Csv "logfile.csv" | where {$_.DateCompleted -gt $FiveMinutesAgo} 
$Content | Export-Csv -delimiter ";" -NoTypeInformation -encoding UTF8 -Path 'logfile.csv'

CSV文件长这个样子:
"DateInitiated";"DateStarted";"DateCompleted";"InitiatedBy";"Action";"Status"
"1496659208";"1496659264";"1496752840";"administrator";"Reboot server";"Completed"

无论五分钟已经过去或没有,执行以上脚本后我的CSV文件最终都是空的。

我从来不会期望PowerShell能够像我想要的那样理解日期时间。我猜你是将日期时间与字符串进行比较。 - restless1987
1个回答

2

我在测试中无法复制它(但可能需要实际的源文件)。我认为问题在于您需要在Import-CSV上指定编码和分隔符(就像您已经在导出上做的那样)。

请尝试以下内容:

$FiveMinutesAgo=(Get-Date ((get-date).toUniversalTime()) -UFormat +%s).SubString(0,10)-300
$Content = Import-Csv "test.csv" -Delimiter ';' -Encoding UTF8 | where {$_.DateCompleted -gt $FiveMinutesAgo} 
$Content | Export-Csv -delimiter ";" -NoTypeInformation -encoding UTF8 -Path 'logfile.csv'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接