Bom dia. Sou iniciante em Stack Overflow, Powershell e RegEx.
Estou interessado em fazer um aprimoramento no programa a seguir no Powershell. A partir de agora, o programa procura por um entityType de "IHUR" dentro de um ForEach. Uma vez que "IHUR" é encontrado, o programa produz dois objetos de interesse: id e RatedOI.
Tenho um arquivo JSON complexo em que id e RatedOI e IHUR estão aparecendo várias vezes no arquivo JSON. Acabei de perceber que IHUR só ocorre uma vez no JSON. Como o programa atual está retornando apenas a 1ª ocorrência de id e RatedOI, estou procurando aprimorá-lo.
Quando entityType "Operator" for encontrado, capture apenas a primeira ocorrência de ID, fisicamente localizada 1 linha acima dela (varredura para cima?)
Quando o entityType "Operator" for encontrado, capture apenas o primeiro RatedOperatorIndicator abaixo dele (varredura para baixo?) (RatedOI pode ser encontrado 1 linha abaixo ou muitas linhas abaixo)
Se a seguinte sequência de caracteres for encontrada (que está em linhas separadas no JSON e não produz resultados):
"EntityType": "Operator", "Characteristics": [
Observe o colchete, não a chave
saída esperada
id RatedIO
---- ------
833e2a7f-c173-4062-9cd6-2196432e0001 False
6fe06340-072f-49b2-8d5a-449e3db80002 True
Produção real
Id RatedOI
---- ------
833e2a7f-c173-4062-9cd6-2196432e0001 False
Alguém pode revisar este arquivo JSON de exemplo e o código do PowerShell e fornecer feedback?
Código JSON
{
"id": "4fd338f7-746b-420b-9d7e-b41709e9a641",
"RD": {
"PDR": []
},
"TimeStamp": "2025-02-14T16:55:20.1433467Z",
"NNTl": {
"CD": [
{
"EntityType": "Occurrence",
"Characteristics": [
"OFGE",
"ORI"
],
"Cardinality": "Many"
},
{
"EntityType": "Operator",
"Characteristics": [
"ADL",
"ERO"
],
"Cardinality": "Many"
}
],
"RRXC": true
},
"EntitiesData": {
"Entities": [
{
"Id": "b0000000-0000-0000-0000-00000000000b",
"EntityType": "IHUR",
"Ordinal": 0,
"Characteristics": {
"PBIL": {
"StringValue": "DDDD"
}
}
},
{
"Id": "833e2a7f-c173-4062-9cd6-2196432e0001",
"EntityType": "Operator",
"Ordinal": 0,
"Characteristics": {
"FN": {
"StringValue": "Da"
},
"RatedOI": {
"BoolValue": false
},
"fdfdf": {
"DDFDF": "SDFDS43R5"
}
},
"EntityCreationDateTime": "2025-02-12T19:42:59.2852792Z"
},
{
"Id": "6fe06340-072f-49b2-8d5a-449e3db80002",
"EntityType": "Operator",
"Characteristics": {
"Deleted": {
"StringValue": "0"
},
"RatedOI": {
"BoolValue": true
}
}
}
]
},
"OR": "FFFFF01"
}
Código Powershell, baseado nesta resposta :
Set-Location C:\Users\A187515\Downloads\
$file = Get-ChildItem -Path C:\Users\A187515\Downloads\ -Filter *.json | Sort-Object LastAccessTime -Descending | Select-Object -First 1
(Get-Content -Raw "$file" | ConvertFrom-Json) | ForEach-Object {
$useNext = $false
foreach ($entity in $_.entitiesData.entities) {
if ($entity.entityType -eq 'IHUR') {
$useNext = $true
}
elseif ($useNext) {
$entity | Select-Object `
id,
@{ Name = 'RatedOI'; Expression = {
$_.characteristics.RatedOI.boolValue }
}
#break
$useNext = $false
}
}
}