/ / Mit Powershell Werte von JSON abrufen - json, Powershell

Holen Sie sich Werte von JSON mit Powershell-Json, Powershell

Sehr Anfängerfrage. Ich versuche, mit Powershell bestimmte Werte von JSON abzurufen. Insbesondere möchte ich die Dienste auflisten: TEST00000 und FÄLSCHUNG nur.

Wenn ich das folgende Skript ausführe, erhalte ich Folgendes:

TEST00000                                                    FAKE
---------                                                    ----
@{Enabled=True; Processed=2; Sent=3; Failed=4; Downloaded=5} @{Enabled=True}

Wie kann ich nur eine Liste der Dienste erhalten?

Noch wichtiger ist, wie liste ich nur die Dienste auf, die den Schlüssel / Wert haben Aktiviert = Wahr in ihnen vorhanden?

Hier ist der Code:

$JSON = "{
"Envs": {
"DEV": {
"Services": {
"TEST00000": {
"Enabled": true,
"Processed": 2,
"Sent": 3,
"Failed": 4,
"Downloaded": 5
},
"FAKE": {
"Enabled": true
}
}
}
},
"Component": {
"Digger": {
"Envs": {
"DEV": {
"DownloadE": 4
}
}
}
}
}"

$jsonobj = ConvertFrom-Json -inputObject $JSON

$jsonobj.Envs.DEV.Services

Antworten:

3 für die Antwort № 1

Um den Namen von jedem zu bekommen Services Eigentum. Sie können verwenden Get-Member wie user2734259 oder Sie können die verwenden psobject Eigenschaft, die nützliche Informationen zu einem Objekt speichert.

$ServiceNames = $jsonobj.Envs.DEV.Services.psobject.properties.name

Sobald Sie die Namen haben, können Sie sie durchlaufen und nach der Untereigenschaft filtern Enabled

$jsonobj.Envs.DEV.Services.psobject.properties.name | ForEach-Object {
$_ | Where-Object {$jsonobj.Envs.DEV.Services.$_.Enabled -eq $True}
}

1 für die Antwort № 2

Auf diese Weise können Sie die Namen unabhängig vom Dienstnamen in Ihrem JSON dynamisch abrufen:

$JSON = "{
"Envs": {
"DEV": {
"Services": {
"TEST00000": {
"Enabled": true,
"Processed": 2,
"Sent": 3,
"Failed": 4,
"Downloaded": 5
},
"FAKE": {
"Enabled": true
}
}
}
},
"Component": {
"Digger": {
"Envs": {
"DEV": {
"DownloadE": 4
}
}
}
}
}"

$jsonobj = ConvertFrom-Json -inputObject $JSON
$enabledServices = $NULL
$disabledServices = $NULL

# Since the service names are arbitrary
# create an object that contains only
# objects whose MemberType is NoteProperty

$strServiceNames = @($($jsonobj.Envs.DEV.Services | Get-Member | Where { $_.MemberType -eq "NoteProperty" } | Select Name).Name)
$pscoServiceNames = [PSCustomObject]@{Names=$strServiceNames}
foreach($serviceName in $pscoserviceNames.Names)
{
# dynamically access the service name
# from $jsonobj.Envs.DEV.Services

$serviceStatus = $jsonobj.Envs.DEV.Services.$serviceName.Enabled

# parse results based on value of .Enabled

if($serviceStatus.ToString() -eq "True")
{
$enabledServices = [Array]$enabledServices + [PSCustomObject]@{Name = $serviceName;Enabled = $serviceStatus}
}
else
{
$disabledServices = [Array]$disabledServices + [PSCustomObject]@{Name = $serviceName;Enabled = $serviceStatus}
}
}

# Show the results

Write-Output "`nEnabled Services`n"
$enabledServices | Format-List
Write-Output "`nDisabled Services`n"
$disabledServices | Format-List

Wenn etwas unklar ist, lass es mich wissen und ich kann es genauer erklären Hoffe das hilft dir weiter. Happy "Beschuss!