我的powershell脚本应该执行以下操作:
从目录中最新的日志文件中读取数据
仅在桌面上的输出文件中输出相关数据。
此刻,每当文档中出现“ lobbyid”一词时,我都会得到整行。
我的代码:
Get-ChildItem -Path "C:\Program Files\Example\logs" |Sort-Object LastAccessTime -Descending | Select-Object -First 1 | Select-String –Pattern "lobbyid"| Select Filename,Line | Format-Table -wrap | Out-File $env:USERPROFILE\Desktop\output.txt -append'
关于包含的日志文件
XXXXXXXXXXXXXXXXXXXXX
{"seqid":5,"lobbyid":"9A74E75D-2BCB-4750-BF3A-87BB4992DC2D","mm":{"status":7}
{"seqid":12,"lobbyid":"CFDAAA9C-F973-40CF-A477-143A5810061D","mm":{"status":10}
YYYYYYYYYYYYYYYYYYYYY
我知道
{"seqid":5,"lobbyid":"9A74E75D-2BCB-4750-BF3A-87BB4992DC2D","mm":{"status":7}
{"seqid":12,"lobbyid":"CFDAAA9C-F973-40CF-A477-143A5810061D","mm":{"status":10}
但是我想要输出
Line 1: 9A74E75D-2BCB-4750-BF3A-87BB4992DC2D
Line 2: CFDAAA9C-F973-40CF-A477-143A5810061D
或类似的东西。我尝试用'lobbyid(。*?)mm'替换“ lobbyid”但这给出了相同的输出。
看来您的日志文件行包含JSON文本,因此您可以尝试以下操作(它不包含行号,正如您在后续评论中所述,该行号并不重要):] >
Get-ChildItem -Path 'C:\Program Files\Example\logs' | Sort-Object LastAccessTime -Descending | Select-Object -First 1 | Select-String –Pattern lobbyid | ForEach-Object { ($_.Line | ConvertFrom-Json).lobbyid }
您的示例日志行缺少结尾的
}
作为有效的JSON,因此,如果实际数据中确实如此,请改用$_.Line + '}'
。