使用未来和过去时间更新 Powershell 文件

问题描述

我有一个以这种方式包含内容的文本文件

One;Thomas;Newyork;2020-12-31 14:00:00;0

Two;David;London;2021-01-31 12:00:00;0

Three;James;Chicago;2021-01-20 15:00:00;0

Four;Edward;India;2020-12-25 15:00:00;0

在这些按日期时间排列的条目中,两个是过去的条目,两个是未来的条目。字符串中的最后一个 0 表示标志。对于过去的条目,该标志需要更改为 1。

考虑到所有条目都用数组分隔。我尝试了这段代码,但无法解决这里的问题。

for ($item=0 ; $item -lt $entries.count ; $item++)
{
  if ($entries.DateTime[$item] -lt (Get-Date -Format "yyyy-MM-dd  HH:mm:ss"))
  {
    $cont = Get-Content $entries -ErrorAction Stop
    $string = $entries.number[$item] + ";" + $entries.name[$item] + ";" + 
    $entries.city[$item]+ ";" + $entries.DateTime[$item] 
    $lineNum = $cont | Select-String $string
    $line = $lineNum.LineNumber + 1
    $cont[$line] = $string + ";1"
    Set-Content -path $entries
  }
}

在这个概念上遇到了错误

输出应为:-

One;Thomas;Newyork;2020-12-31 14:00:00;1((相对于当前日期的过去部署)

二;大卫;伦敦;2021-01-31 12:00:00;0

三;詹姆斯;芝加哥;2021-01-20 15:00:00;0

四;爱德华;印度;2020-12-25 15:00:00;1(过去部署相对于当前日期)

需要在提取内容文件(即 Entries.txt)上覆盖此输出

解决方法

param(
    $exampleFileName = "d:\tmp\file.txt"
)

@"
One;Thomas;Newyork;2020-12-31 14:00:00;0

Two;David;London;2021-01-31 12:00:00;0

Three;James;Chicago;2021-01-20 15:00:00;0

Four;Edward;India;2020-12-25 15:00:00;0
"@ | Out-File $exampleFileName


Remove-Variable out -ErrorAction SilentlyContinue

Get-Content $exampleFileName | ForEach-Object {
    $out += ($_ -and [datetime]::Parse(($_ -split ";")[3]) -gt [datetime]::Now) ? $_.SubString(0,$_.Length-1) + "1`r`n" : $_ + "`r`n"
}

Out-File -InputObject $out  -FilePath $exampleFileName