Теперь, когда Powershell является открытым исходным кодом и кроссплатформенным (с Powershell Core), я решил попробовать еще раз.
Я использовал в прошлом и в какой-то момент понял, как работают конвейеры, но это не супер интуитивно понятно.Так и должно быть, но это не так, поэтому я несколько застрял ...
Задача под рукой: проанализировать и распечатать несколько полей из вывода JSON команды.Я мог бы, вероятно, сделать это старомодным способом, с внешними командами и обработкой строк, а-ля bash, но я хочу научиться делать это способ Powershell ™.
И чтобы уточнить, я хочу сделать это в интерактивном режиме, в конвейере. Я не хочу писать сценарий, я хочу узнать, как выполнять этот вид обработки в одной строке (или 2, максимум, но в основном с Powershell, работающим как REPL, а не как инструмент скрипта).
Команда Bash:
aws cloudformation describe-stack-events --stack-name some-stack-here | jq ".StackEvents[] | [.Timestamp, .ResourceStatus, .ResourceType, .ResourceStatusReason] | join(\" \")"
Для этого нужно взять входной JSON и напечатать всего 3 поля, которые меня интересуют.
ВводJSON:
{
"StackEvents": [
{
"StackId": "arn:aws:cloudformation:some-region-here:some-number-here:stack/some-stack-here/some-id-here",
"EventId": "some-event-id-here",
"ResourceStatus": "UPDATE_COMPLETE",
"ResourceType": "AWS::CloudFormation::Stack",
"Timestamp": "some-date-here",
"StackName": "some-stack-here",
"PhysicalResourceId": "arn:aws:cloudformation:some-region-here:some-number-here:stack/some-stack-here/some-id-here",
"LogicalResourceId": "some-stack-here"
},
{
"StackId": "arn:aws:cloudformation:some-region-here:some-number-here:stack/some-stack-here/some-id-here",
"EventId": "some-event-id-here",
"ResourceStatus": "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS",
"ResourceType": "AWS::CloudFormation::Stack",
"Timestamp": "some-date-here",
"StackName": "some-stack-here",
"PhysicalResourceId": "arn:aws:cloudformation:some-region-here:some-number-here:stack/some-stack-here/some-id-here",
"LogicalResourceId": "some-stack-here"
}
]
}
Вывод команды:
"some-date-here UPDATE_COMPLETE AWS::CloudFormation::Stack "
"some-date-here UPDATE_COMPLETE_CLEANUP_IN_PROGRESS AWS::CloudFormation::Stack "
(Я думаю, что это должно быть на Stackoverflow, потому что тема подразумевает довольно глубокое понимание концепций Powershell, включая объекты .NET, гораздо ближев программировании, чем в системном администрировании, т.е. SuperUser или около того.)