Powershell从日志文件获取日期

时间:2020-03-21 22:05:57

标签: powershell

我想从日志文件中获取日期。

日志文件中的文本。

错误代码。 200105.简单文本等等------------->它的日期应为2020 Jan 05

错误代码。 2000207.简单文本等等------------->它的日期应为2020 Feb 07

我尝试了一下,但是没有用。

获取日期“ 200105”-格式为“ y-m-d”,但无效。

我也尝试“ 200105” |日期,但仍然相同

此方法确实有效[datetime] :: ParseExact(“ 120105”,“ y.m.d”,$ null),但是我如何只获取日期却忽略所有其他文本

3 个答案:

答案 0 :(得分:0)

根据documentation,如果Get-Date从区域设置中识别出日期格式,则它将字符串转换为日期。

例如,在英国,它识别Get-Date“ 2020/03/21”,但不能识别Get-Date“ 20200321”

格式字符串仅用于格式化当前日期。

这有效:格式字符串中的字符数代表输入的大小(它与日和年中的数字数匹配-几个月比较复杂),M代表月(m代表分钟)。

[78.90399933         nan         nan]
[75.04682159 8.51200104 8.16529846]
[78.07499695         nan         nan]
[81.23899841 9.76999664 9.13999939]
[80.60099792 8.34100342 8.07700348]
[79.50131226         nan         nan]
[72.7118988  4.44860077 7.51000214]
[79.55729675         nan         nan]
[74.17259979 5.2460022  7.83300018]
[74.11289978 4.3219986  7.40000153]
[79.62058258         nan         nan]

2020年3月21日,星期六,00:00:00

答案 1 :(得分:0)

如果要使用更短的版本,可以通过如下方式将输出进行管道传递

$date = [datetime]::ParseExact($text2, "y.M.d", $null)

$date | Get-Date -Format dd-MMMM-yyyy

$date.ToString("yyyy MMMM dd")

答案 2 :(得分:0)

您的第二个示例2000207无效,因为其中有多余的0

我将在这里使用TryParseExact方法来查看您是否实际上是可解析的日期时间字符串。

$logLine = 'Error code. 200105. Simple text and so on'
if ($logLine -match '^Error code\s*\.?\s*(\d{6})') {
    $date = Get-Date    # any valid DateTime object will do
    if ([datetime]::TryParseExact($Matches[1], 'yyMMdd', [cultureinfo]::InvariantCulture, 0, [ref]$date)) { 
        # do something with the date found. For demo, just output in the console
        "Found a date: $date" 
    }
}

您可能正在逐行读取日志文件,例如:

Get-Content -Path 'TheLogFile' | ForEach-Object {
    if ($_ -match '^Error code\s*\.?\s*(\d{6})') {
        $date = Get-Date    # any valid DateTime object will do
        if ([datetime]::TryParseExact($Matches[1], 'yyMMdd', [cultureinfo]::InvariantCulture, 0, [ref]$date)) { 
            # do something with the date found. For demo, just output in the console
            "Found a date: $date" 
        }
    }
}