【问题标题】:CSV match cell value to Current timeCSV 将单元格值与当前时间匹配
【发布时间】:2022-01-22 07:51:25
【问题描述】:

我有一个包含数据的 CSV

Date        Time        Impact  Warning
12/20/2021  10:00 AM    Low     9:57:00 AM
12/21/2021  8:30 AM     Low     8:27:00 AM
12/22/2021  8:30 AM     Medium  8:27:00 AM

我有一个计时器循环正在运行,如果警告时间为 -eq 到当前时间(EST),我希望变量 $eventsoon 为真。

#Import CSV
$csv = Import-Csv C:\filelocation.csv

#Get eastern Timezone#
$eastern = [System.TimeZoneInfo]::convertTimeBySystemTimeZoneId([datetime]::Now, 'Eastern Standard Time')
#Format Eastern Time#
$easternTime = Get-Date $eastern -format "HH:mm:ss tt"

#Find Matching Time between Current US Eastern Time and Warningtime
 $eventsoon = $csv  |
    Where-Object { $_.Warning -eq  $easternTime} |
    ForEach-Object {
      
        Write-Host ($_.Warning,$_.Impact) 
    }
 $eventsoon

测试时,我可以触发 -eq 但没有保存到 $eventsoon 变量?

我错过了什么?

感谢您的宝贵时间。

【问题讨论】:

  • 除非重定向 (6>&1),否则不会捕获来自 Write-Host 的输出。不要使用它:)
  • 我正在使用 write-host 进行测试。我会继续努力。谢谢圣地亚哥
  • 您查看过$EasternTime 中的内容吗?您使用了HH:mm:ss tt ...这将给出08:27:00 AM ...但您的$_.Warning将显示8:27:00 AM。 [grin] ///// 这就是为什么您不应该比较日期时间字符串的原因之一 - 而是比较日期时间对象。*跨度>
  • 正确,我试图 -eq 一个字符串和一个对象。试图将字符串传递给对象
  • @MattyS - 所以将您的$_.Warning 转换为日期时间对象并将您的$EasternTime 保留为日期时间对象,而不是将其强制转换为日期字符串。

标签: powershell csv


【解决方案1】:

这里是关于如何解决问题的提示,首先,Lee_Dailey 给了你一个非常安心的建议:始终使用DateTime 来比较日期和时间。另外需要注意的是,使用-eq 可能不是正确的比较运算符,专门用于过滤时间,通常您会按时间范围进行过滤,例如:“2 分钟以上这比这少 2 分钟..."

提示如下:

$csv = @'
Date        Time        Impact  Warning
12/20/2021  10:00 AM    Low     9:57:00 AM
12/21/2021  8:30 AM     Low     8:27:00 AM
12/22/2021  8:30 AM     Medium  8:27:00 AM
12/22/2021  8:30 AM     Medium  1:50:00 PM
'@ -replace '  +',',' | ConvertFrom-Csv

# Let's try to filter the last line of the CSV (1:50:00 PM)

$est = [System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId(
    [datetime]::Now,
    'Eastern Standard Time'
) # => Monday, December 20, 2021 1:48:45 PM

$result = $csv | Where-Object {
    [datetime]$_.Warning -gt $est.AddMinutes(-15) -and
    [datetime]$_.Warning -lt $est.AddMinutes(15)
}

# $result would yield:

Date       Time    Impact Warning
----       ----    ------ -------
12/22/2021 8:30 AM Medium 1:50:00 PM

# If you want to see just a True / False
[bool]$result # => True

【讨论】:

  • 感谢您今天提供的所有帮助。真的消除了我的不确定性。
  • @MattyS 很乐意为您提供帮助,也很高兴您正在学习新东西 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多