我有一个带有VBA代码的excel工作簿,该代码执行Powershell命令行脚本以根据模式检查从日志文件中提取信息。
我遇到的问题是有多行具有匹配的文本,唯一的区别是日期。
我正在寻找一种方法来添加当前日期,格式为 yyyy-mm-dd,作为匹配标准。
当前命令行代码为:
Get-Content '\loggingserver.log' | Select-String -Pattern "[d]{4}-[d]{2}-[d]{2}.*finished executing" -CaseSensitive
此代码返回 4 行的预期结果集:
139907928364800 [488] 2019-09-02 Process "Metadata Control": finished executing.
139856228501248 [4311] 2019-09-03 Process "Metadata Control": finished executing.
139855148627712 [8289] 2019-09-04 Process "Metadata Control": finished executing.
139854016616192 [11892] 2019-09-05 Process "Metadata Control": finished executing.
但是,我只想返回最后一行,其中日期等于 2019-09-05(当前日期(。
任何建议将不胜感激。
选择字符串 cmdlet 还具有-Path
参数,因此无需在此处使用Get-Content
:
(Select-String -Path '\loggingserver.log' -Pattern "[d]{4}-[d]{2}-[d]{2}.*finished executing" -CaseSensitive | Select-Object -Last 1).Line
返回
139854016616192 [11892] 2019-09-05 Process "Metadata Control": finished executing.
$today = (get-Date).ToString("yyyy-MM-dd")
$filename = "C:temptest.txt"
$Search = Select-String -Path $filename -Pattern $today | Select-Object -ExpandProperty 'LineNumber'
foreach ($single_Number in $Search) {
(Get-Content "C:temptest.txt")[$single_Number - 1]
}
这将输出包含当前日期的行,或者当您添加天数(例如昨天(的任何其他日期时:$today = (get-Date).AddDays(-1).ToString("yyyy-MM-dd")
如果您想要的行是 -always- last,则可以选择最后一行。
Get-Content '\loggingserver.log' |
Select-String -Pattern "[d]{4}-[d]{2}-[d]{2}.*finished executing" -CaseSensitive |
Select-Object -Last 1
如果今天没有进行最后一个条目,这可能会有所帮助。例如,最后一个条目是在星期五,但今天是星期一。