Cla*_*ioM 1 iteration powershell invoke-command
设法获得JSON数据
$R= Invoke-WebRequest -Uri $url -Headers $headers -ContentType "application/json" -Method Get -UseBasicParsing
$x = $R.Content | Out-String | ConvertFrom-Json
Run Code Online (Sandbox Code Playgroud)
现在我有一个像这样的JSON文件:
{
"id": 1000,
"name_with_namespace": "myProjectName1",
},
{
"id": 1001,
"name_with_namespace": "myProjectName2",
},
{
"id": 1002,
"name_with_namespace": "myProjectName3",
}
Run Code Online (Sandbox Code Playgroud)
现在我需要提取所有出现的地方"name_with_namespace"和"id"地点"name_with_namespace" = "myProjectName.*"
我该如何一次性完成?
我试过这个:
foreach ($name in $x.name_with_namespace) {
if ( $name -match ".*myProjectName.*" ) {
write-host "$name - $x.id"
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到了这个:
myProjectName1 1000 1001 1002
myProjectName2 1000 1001 1002
myProjectName3 1000 1001 1002
Run Code Online (Sandbox Code Playgroud)
我知道问题出在$ x.id上,我怎样才能获得正确的价值而不是一切?
我的预期输出是
myProjectName1 1000
myProjectName2 1001
myProjectName3 1002
Run Code Online (Sandbox Code Playgroud)
在定义循环时,您正在向下钻取一个级别.只需迭代$x然后检查循环内的特定属性.
foreach ($name in $x) {
if ( $name.name_with_namespace -match ".*myProjectName.*" ) {
write-host "$($name.name_with_namespace) - $($name.id)"
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:在旁注中,您可以将您简化-match为公正"myProjectName",它也可以正常工作,并且可能更快.