gpt4 book ai didi

powershell - PowerShell日期时间转换

转载 作者:行者123 更新时间:2023-12-03 00:59:50 29 4
gpt4 key购买 nike

我有这个脚本,用于处理包含日期格式为yyyy-MM-dd HH:mm:ss的条目的日志文件。但是,我不知该如何读取以yyyy-MM-dd:HH:mm:ss作为日期格式格式化的日志条目。

我一直在尝试使用ParseExact()为我转换日期,但似乎无法正常工作,这是我的错。

Cannot convert value "2019-09-10:12:40:03 " to type "System.DateTime". Error: "String was not recognized as a valid DateTime."


$logfile =  "C:\logs\APP.log"
cat $logfile | Select-String "ERROR" -SimpleMatch | select -Expand line | foreach {
$_ -match '(.+)ERROR(.+)'| Out-Null

$error_time = [DateTime]($matches[1])

$culture = [Globalization.CultureInfo]::InvariantCulture
$error_time = [DateTime]::ParseExact("$matches[1]", "yyyy-MM-dd:HH:mm:ss", $culture)
if ($error_time -gt (Get-Date).AddMinutes(-60)) {
Write-Host "CRITICAL: There is an error in the log file" $logfile "around "$error_time;
} else {
Write-Host "OK: There was no errors in the past 24h"
}
}

最佳答案

您的代码有两个问题:

  • [DateTime]($matches[1]):
    您的时间戳记在日期和时间部分之间有一个冒号。这不是PowerShell可以强制转换为DateTime对象的格式之一。
  • 如果您仔细查看错误消息,您会发现时间戳记后面有空白。您在ParseExact()中使用的模式无法解决这个问题。另外,将$matches[1]放在双引号("$matches[1]")中并不能使您获得第一个捕获组的值作为字符串。您实际上得到的是"$matches" + "[1]",因为PowerShell不支持使用字符串中的变量进行索引或点访问。

  • 删除双引号并修剪捕获组的值以删除尾随空白。
    $culture = [Globalization.CultureInfo]::InvariantCulture
    $error_time = [DateTime]::ParseExact($matches[1].Trim(), 'yyyy-MM-dd:HH:mm:ss', $culture)

    另外,删除线
    $error_time = [DateTime]($matches[1])

    关于powershell - PowerShell日期时间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57885856/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com