Wie man JSON-Objekte mit PowerShell liest, ändert und analysiert

JSON ist das gängigste textbasierte Format für Datenstrukturen, die leicht lesbar und übertragbar sind. Wenn Sie PowerShell verwenden, sollten Sie zwei wichtige Cmdlets kennen: `json.json` ConvertFrom-Jsonund ` ConvertTo-Jsonjson.json`.Sie sind äußerst praktisch zum Erstellen, Lesen, Bearbeiten und sogar zum Speichern von JSON-Daten in einer Datei. Es mag anfangs etwas ungewöhnlich klingen, aber sobald man den Dreh raus hat, ist es ganz einfach.

Daten in JSON liegen als Schlüssel-Wert- Paare vor, und ja, man kann Elemente ineinander verschachteln. Angenommen, Sie möchten JSON-Daten erstellen und speichern; dazu erstellen Sie zunächst ein PowerShell-Objekt. Zum Beispiel:

$obj = @{ Name = "Henry" Roles = @{ AD = "Admin" SQL = "Report" } "Company" = "woshub" } 

Dies ist im Grunde eine Mini-Datenbank in PowerShell. Konvertieren Sie dieses Objekt anschließend in JSON und speichern Sie es in einer Datei auf Ihrem Laufwerk:

$json = $obj | ConvertTo-Json Set-Content -Path C:\PS\userroles.json -Value $json 

Es ist wichtig, die Reihenfolge einzuhalten. Der Codeausschnitt, den Sie zuvor gepostet haben, scheint die Befehle merkwürdig kombiniert zu haben. In einer Konfiguration hat es funktioniert, in einer anderen nicht. Führen Sie daher immer zuerst die Konvertierung durch und schreiben Sie dann in die Datei. Außerdem enthält der von Ihnen geteilte Befehl einen Tippfehler; er sollte lauten:

$json = $obj | ConvertTo-Json Set-Content -Path C:\PS\userroles.json -Value $json 

Um das JSON nun wieder in PowerShell einzulesen, gehen Sie wie folgt vor:

$json = Get-Content -Path C:\PS\userroles.json -Raw | ConvertFrom-Json 

Das Arbeiten mit JSON-Eigenschaften ist recht einfach. Man listet einfach alle Eigenschaften auf mit:

$json | Format-List 

Oder, wenn Sie den Wert einer bestimmten Eigenschaft benötigen, beispielsweise die SQL-Rolle, gehen Sie wie folgt vor:

$json. Roles. SQL 

Wenn Sie nun eine neue Eigenschaft hinzufügen müssen – beispielsweise eine E-Mail-Adresse – können Sie Add-Member verwenden. Beachten Sie jedoch, dass die Syntax manchmal etwas ungewöhnlich sein kann, insbesondere bei komplexen Objekten. Beispiel:

$json | Add-Member -MemberType NoteProperty -Name "Email" -Value "[email protected]"

Hinweis: PowerShell-Objekte und JSON sind nicht identisch. Manchmal ist eine Konvertierung zwischen den Formaten erforderlich. Wenn Sie beispielsweise eine Eigenschaft ändern, gehen Sie wie folgt vor:

$json. Roles. SQL = 'Admin' $json | ConvertTo-Json | Set-Content -Path C:\PS\userroles.json 

Um eine Eigenschaft wie „E-Mail“ zu entfernen, gehen Sie einfach wie folgt vor:

$json. PSObject. Properties. Remove("Email") 

Wenn Sie Daten von einer Web-API abrufen, die JSON zurückgibt, ist das Cmdlet „Invoke-WebRequest“ Ihr hilfreichster Begleiter. Um beispielsweise die DNS-Ergebnisse von Google in JSON umzuwandeln, gehen Sie wie folgt vor:

$site = "woshub.com" $rawresp = Invoke-WebRequest "https://dns.google/resolve?name=$site&type=A" $rawjson = ConvertFrom-Json -InputObject $rawresp. Content $dnsAnswers = $rawjson. Answer. Data 

Das alles ist ziemlich leistungsstark, sobald man den Dreh raus hat, aber ja, es kann etwas knifflig sein – besonders bei verschachtelten Objekten oder ungewöhnlichen Datenformaten. Am Anfang sollte man es einfach halten und keine Angst vor Experimenten haben.