PowerShell разделен на хеш-таблицу - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь разбить строку, полученную от jira rest api, и не могу найти хороший способ сделать это.API возвращает объект такого типа

com.atlassian.greenhopper.service.sprint.Sprint@3b306c49 [id = 2792, rapidViewId = 920, состояние = ЗАКРЫТО, имя = ABI отчеты / поддержка спринт 12,StartDate = 2018-09-11T09: 45: 26,622 + 02: 00, EndDate = 2018-09-27T22: 00: 00.000 + 02: 00, completeDate = 2018-09-28T08: 15: 41,088 + 02: 00, последовательность =2792] com.atlassian.greenhopper.service.sprint.Sprint@c518022 [id = 2830, rapidViewId = 920, state = ACTIVE, name = ABI Reports / Support sprint 13, startDate = 2018-09-28T08: 30: 26.785 + 02: 00, endDate = 2018-10-16T20: 30: 00.000 + 02: 00, completeDate =, sequence = 2830]

То, что я делаю с ним,

$sprints = $issue.fields.customfield_10012 | Select-String -Pattern '\x5b(.*)\x5d' | ForEach-Object {$_.Matches.Groups[1].Value}

Где $ issue.fields.customfield_10012 - это поле, возвращаемое из REST API

. Это дает мне объект с чередующимися данными, которые я могу преобразовать в хеш-таблицу, используя эту

Foreach ($sprint in $sprints) {
  Try {
    #assign values to variable
    $sprint = $sprint -split ',' | Out-String
    $sprint = ConvertFrom-StringData -StringData $sprint
    [int]$sId = $sprint.id
    $sName = "N'" + $sprint.name.Replace("'", "''") + "'"
    #insert into sql using Invoke-Sqlcmd
  }
  Catch {
    #Write log msg into log table about error in Staging of the worklog for the ticket
    $logMsg = "Staging sprint ($sId) for ticket ($key): $($_.Exception.Message)"
    Write-Host $logMsg
  }
}

Но мои пользователиcreative и одним из названий спринта было «Sprint 11 - AS, SS, RS», которое разбивает мой -split 'и преобразует его в хэш-таблицу.

Любая идея, как разбить эту строку на правильные hтаблица пепла?

com.atlassian.greenhopper.service.sprint.Sprint@3b306c49 [id = 2792, rapidViewId = 920, состояние = ЗАКРЫТО, имя = ABI отчеты / вспомогательный спринт 12, startDate = 2018-09-11T09: 45: 26.622 + 02: 00, endDate = 2018-09-27T22: 00: 00.000 + 02: 00, completeDate = 2018-09-28T08: 15: 41.088 + 02: 00, sequence = 2792] com.atlassian.greenhopper.service.sprint.Sprint @ c518022 [id = 2830, rapidViewId = 920, состояние = ACTIVE, имя = Sprint 11 - AS, SS, RS, startDate = 2018-09-28T08: 30: 26,785 + 02:00, endDate = 2018-10-16T20: 30: 00.000 + 02: 00, completeDate =, sequence = 2830]

1 Ответ

0 голосов
/ 16 октября 2018

Разделить строку на запятую , за которой следует слово со знаком равенства

Работа с каждой из этих записей в отдельной строке (если это не соответствует исходным данным, вы все равно можетеиспользуйте приведенную ниже логику) мы выполняем сопоставление, чтобы разделить данные внутри фигурных скобок [] и извне.Затем мы разбили эти внутренние данные, как описано выше, с положительным взглядом, чтобы получить хеш-таблицы.

$lines = "com.atlassian.greenhopper.service.sprint.Sprint@3b306c49[id=2792,rapidViewId=920,state=CLOSED,name=ABI Reports/Support sprint 12,startDate=2018-09-11T09:45:26.622+02:00,endDate=2018-09-27T22:00:00.000+02:00,completeDate=2018-09-28T08:15:41.088+02:00,sequence=2792]", 
"com.atlassian.greenhopper.service.sprint.Sprint@c518022[id=2830,rapidViewId=920,state=ACTIVE,name=Sprint 11 - AS,SS,RS,startDate=2018-09-28T08:30:26.785+02:00,endDate=2018-10-16T20:30:00.000+02:00,completeDate=,sequence=2830]"


$lines | Where-Object{$_ -match "^(?<sprintid>.*)\[(?<details>.*)\]"} | ForEach-Object{
    $Matches.details -split ",(?=\w+=)" | Out-String | ConvertFrom-StringData
}

Если мы используем ускоритель типа [pscustomobject], когда мы можем получить объект, установленный прямо из этого.

id : 2792 startDate : 2018-09-11T09:45:26.622+02:00 completeDate : 2018-09-28T08:15:41.088+02:00 sequence : 2792 name : ABI Reports/Support sprint 12 rapidViewId : 920 endDate : 2018-09-27T22:00:00.000+02:00 state : CLOSED</p> <p>id : 2830 startDate : 2018-09-28T08:30:26.785+02:00 completeDate : sequence : 2830 name : Sprint 11 - AS,SS,RS rapidViewId : 920 endDate : 2018-10-16T20:30:00.000+02:00 state : ACTIVE

У меня больше опыта с ConvertFrom-StringData, однако, как TheIncorrigible1 упоминает, что ... ConvertFrom-String также мощен и можетуменьшите немного работы здесь.

...