elsdybck
Goto Top

Powershell Array eine Hashtable hinzufügen

Hi liebes Forum!

Ich hoffe ihr habt eine Lösung für mein Problem, ewiges googlen hat mich bisher nicht auf den grünen Zweig gebracht.

Folgendes: zur Datenhaltung möchte ich ein Powershellskript schreiben, dass Informationen, die eingegeben werden können, in einer JSON-Datei ablegt. Bisher funktioniert das Skript auch soweit, dass die Daten in die JSON geschrieben werden, allerdings gibt es Probleme beim Hinzufügen neuer Daten.

Ich habe dazu ein Array, in dem Hashtables gespeichert werden sollen. Bei der ersten Eingabe von Daten funktioniert das. Beim zweiten mal funktioniert das auch, jedoch erstellt es ein neues Array (siehe Output unten). Ich möchte jedoch alle weiteren eingegebenen Daten (sprich BIB2) in das erste erstellte Array (in dem sich BIB1 befindet) hinzufügen, sodass ich später die Möglichkeit zum Auslesen und Ändern der Datensätze habe. Hier kommt jedoch ein Fehler, wenn ich dem Array mit $a.Add() einen neuen Wert hinzufügen will. Es erscheint die Fehlermeldung, dass das Array eine feste Größe hat. Ich habe schon über Google nach Workarounds gesucht und auch einige gefunden, allerdings funktionieren diese nicht (Beispielsweise Array als [System.Collections.ArrayList]). Ich habe sicherlich irgendwo einen Denk-/Codefehler drin, finde diesen aber nicht. Deswegen bin ich für jede Hilfe dankbar.

Ich danke euch schon mal im Voraus.

Mein bisheriger Code:
$BIB = Read-Host 'Bibliothek'  
$BIBName = Read-Host 'Bibliothek Name'  
$Standort = Read-Host 'Bibliothek Standort'  
$Autor = Read-Host 'Buchautor'  
$BuchName = Read-Host 'Buchname'  



$jsonfile = "C:\Skripte\bib.json"  
if(![System.IO.File]::Exists($path)){
   $jsonfile
    $NewData = @((@{$BIB = @(@{
        BIBName=$BIBName; 
        Standort = $Standort; 
        Bücher = @(@{
            BuchName = $BuchName; 
            Autor = $Autor
            })
        })
    }))
ConvertTo-Json -Depth 20 -InputObject $NewData | Add-Content $jsonfile
} else {
    if ((($NewData = Get-Content $jsonfile | ConvertFrom-Json) | Measure-Object).Count -gt 0) {
        $NewData.Add(@{$BIB = @(@{
            BIBName=$BIBName; 
            Standort = $Standort; 
            Bücher = @(@{
                BuchName = $BuchName; 
                Autor = $Autor
                })
            })
        })
    ConvertTo-Json -Depth 20 -InputObject $NewData | Add-Content $jsonfile} 
    else { 
        $NewData += (@{$BIB = @(@{
                BIBName=$BIBName; 
                Standort = $Standort; 
                Bücher = @(@{
                    BuchName = $BuchName; 
                    Autor = $Autor
                })
            })
        })
    ConvertTo-Json -Depth 20 -InputObject $Data | Add-Content $jsonfile
    }
}

Output vom bisherigen Code:
[
    {
        "BIB1":  [  
                     {
                         "BIBName":  "Stadtbibliothek",  
                         "Bücher":  [  
                                        {
                                            "Autor":  "Max Meier",  
                                            "BuchName":  "IT-Handbuch"  
                                        }
                                    ],
                         "Standort":  "Berlin"  
                     }
                 ]
    }
]
[
    {
        "BIB2":  [  
                     {
                         "BIBName":  "Landesbibliothek",  
                         "Bücher":  [  
                                        {
                                            "Autor":  "Peter Müller",  
                                            "BuchName":  "Cloud"  
                                        }
                                    ],
                         "Standort":  "Aachen"  
                     }
                 ]
    }
] 


Beste Grüße

Content-Key: 367404

Url: https://administrator.de/contentid/367404

Printed on: April 23, 2024 at 17:04 o'clock

Member: AndreasHoster
AndreasHoster Mar 08, 2018 at 11:32:54 (UTC)
Goto Top
Ich habe mir Deinen Code jetzt nicht angeschaut, aber neue Elemente zu einem vorhandenen Array hinzuzufügen geht mit dem += Operator:
$Array += $NeuesElement
Member: elsdybck
elsdybck Mar 08, 2018 at 13:37:41 (UTC)
Goto Top
Ich habe noch ein bisschen rumprobiert und nun selbst meinen Fehler entdeckt und behoben, nun hat das Skript die gewünschte Funktionsweise. Danke @AndreasHoster für deine Antwort, mit dem Operator habe ich auch gearbeitet wie in meinem Skript zu sehen, allerdings war der Fehler wo anders versteckt.