使用Powershell从AWS JSON提取一些字段
既然Powershell是开源和跨平台的(带有Powershell核心),我想我应该再试一次 我在过去使用过,并且在某个时候已经了解了管道是如何工作的,但它不是超直观的。应该是,但不是,所以我有点被卡住了 手头的任务:解析并打印命令JSON输出中的几个字段。我可能可以用老式的方式,使用外部命令和字符串处理,就像bash一样,但是我想学习如何用Powershell的方式™. 为了澄清,我想以互动的方式,在管道中进行。我不想编写脚本,我想学习如何在一行程序(最多2行,但基本上是将Powershell用作REPL,而不是脚本工具)中进行此类处理 Bash命令:使用Powershell从AWS JSON提取一些字段,json,powershell,Json,Powershell,既然Powershell是开源和跨平台的(带有Powershell核心),我想我应该再试一次 我在过去使用过,并且在某个时候已经了解了管道是如何工作的,但它不是超直观的。应该是,但不是,所以我有点被卡住了 手头的任务:解析并打印命令JSON输出中的几个字段。我可能可以用老式的方式,使用外部命令和字符串处理,就像bash一样,但是我想学习如何用Powershell的方式™. 为了澄清,我想以互动的方式,在管道中进行。我不想编写脚本,我想学习如何在一行程序(最多2行,但基本上是将Powershell
aws cloudformation描述堆栈事件——堆栈名称此处为一些堆栈| jq“。StackEvents[].[Timestamp、.ResourceStatus、.ResourceType、.ResourceStatusReason]| join(\“\”)”
这样做的目的是获取输入JSON并只打印我感兴趣的3个字段
输入JSON:
命令输出:
(我认为这应该是关于Stackoverflow的,因为本主题涉及到对Powershell概念的非常深入的理解,包括.NET对象,更接近于编程而不是系统管理,例如超级用户等等。)您可以:
$j = aws cloudformation describe-stack-events --stack-name some-stack-here | ConvertFrom-Json
$j.StackEvents | % { "{0} {1} {2}" -f $_.Timestamp, $_.Resourcestatus, $_.ResourceType }
使用ConvertFrom-Json
cmdlet将命令结果存储到powershell对象中,然后您可以选择StackEvents
数组并将其循环以选择所需的值
如果您想在一行中完成此操作:
(aws cloudformation describe-stack-events --stack-name some-stack-here | ConvertFrom-Json).StackEvents | %
{ "{0} {1} {2}" -f $_.Timestamp, $_.Resourcestatus, $_.ResourceType }
你可以做:
$j = aws cloudformation describe-stack-events --stack-name some-stack-here | ConvertFrom-Json
$j.StackEvents | % { "{0} {1} {2}" -f $_.Timestamp, $_.Resourcestatus, $_.ResourceType }
使用ConvertFrom-Json
cmdlet将命令结果存储到powershell对象中,然后您可以选择StackEvents
数组并将其循环以选择所需的值
如果您想在一行中完成此操作:
(aws cloudformation describe-stack-events --stack-name some-stack-here | ConvertFrom-Json).StackEvents | %
{ "{0} {1} {2}" -f $_.Timestamp, $_.Resourcestatus, $_.ResourceType }
太棒了,这就是我想要的。我知道%是foreach,但允许访问对象的语言功能是什么?我的意思是,{0},-f等等。我不知道谷歌和Powershell的在线文档有点稀疏/不太清楚。(好的,找到了,它是-f aka格式操作符:)。很酷,非常感谢,这就是我错过的!太棒了,这就是我想要的。我知道%是foreach,但允许访问对象的语言功能是什么?我的意思是,{0},-f等等。我不知道谷歌和Powershell的在线文档有点稀疏/不太清楚。(好的,找到了,它是-f aka格式操作符:)。很酷,非常感谢,这就是我错过的!