Powershell: извлечение данных между двумя строками в самом новом файле в каталоге - PullRequest
1 голос
/ 08 апреля 2020

Мой сценарий powershell должен выполнять следующие действия:

  • Считывать данные из новейшего файла журнала в каталоге

  • Только вывод соответствующие данные в выходном файле на моем рабочем столе.

В настоящий момент я получаю всю строку каждый раз, когда в документе появляется слово «лоббид».

Мой код:

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

Или что-то подобное. Я попытался заменить "лоббид" на 'лоббид (. *?) Мм' Но это дало тот же результат.

1 Ответ

0 голосов
/ 09 апреля 2020

Попробуйте следующее (в котором нет номера строки, который, как вы указали в последующем комментарии, не важен; также, для краткости вызов Out-File опущен):

Get-ChildItem 'C:\Program Files\Example\logs' |
  Sort-Object LastAccessTime -Descending |
    Select-Object -First 1 | 
      Select-String –Pattern '"lobbyid":"([^"]+)' |
        ForEach-Object { $_.Matches.Groups[1].Value }
...