Powershell ausfüllen von Werten in verschachtelten Hashtables
Moin,
Powershell Hashtable Key False
Ich stolper von einem Punkt zum nächsten und habe von Gestern zu Heute versucht den nächsten Punkt selber zu erschließen, aber ich werd nicht schlau.
Alldata in leer, Ausgabe als JSON der besseren Lesbarkeit
Wenn ich dort nun Werte eintrage:
Werden die auch eingetragen und gerechnet.
Problem:
Warum addiert er die Zahlen für 2020, 2023 und 2025 bei allen und nicht nur bei Ordered, Modified oder Cancelled?
VG
Powershell Hashtable Key False
Ich stolper von einem Punkt zum nächsten und habe von Gestern zu Heute versucht den nächsten Punkt selber zu erschließen, aber ich werd nicht schlau.
Alldata in leer, Ausgabe als JSON der besseren Lesbarkeit
{
"ad_test": {
"Count": "",
"Status": {
"Active": "",
"Cancelled": ""
},
"Ordered": {
"2020": "",
"2024": "",
"2025": "",
"2021": "",
"2022": "",
"2023": ""
},
"Modified": {
"2020": "",
"2024": "",
"2025": "",
"2021": "",
"2022": "",
"2023": ""
},
"Cancelled": {
"2020": "",
"2024": "",
"2025": "",
"2021": "",
"2022": "",
"2023": ""
}
}
}
Wenn ich dort nun Werte eintrage:
[int]$alldata."ad_test".Count += 1
[int]$alldata."ad_test".Status.Active += 2
[int]$alldata."ad_test".Status.Cancelled += 3
[int]$alldata."ad_test".Ordered."2020" += 3
[int]$alldata."ad_test".Ordered."2023" += 6
[int]$alldata."ad_test".Ordered."2025" += 7
[int]$alldata."ad_test".Modified."2020" += 1
[int]$alldata."ad_test".Cancelled."2023" += 2
Werden die auch eingetragen und gerechnet.
Problem:
{
"ad_test": {
"Count": 1,
"Status": {
"Cancelled": 3,
"Active": 2
},
"Ordered": {
"2020": 4,
"2024": "",
"2025": 7,
"2021": "",
"2022": "",
"2023": 8
},
"Modified": {
"2020": 4,
"2024": "",
"2025": 7,
"2021": "",
"2022": "",
"2023": 8
},
"Cancelled": {
"2020": 4,
"2024": "",
"2025": 7,
"2021": "",
"2022": "",
"2023": 8
}
}
}
Warum addiert er die Zahlen für 2020, 2023 und 2025 bei allen und nicht nur bei Ordered, Modified oder Cancelled?
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668015
Url: https://administrator.de/contentid/668015
Ausgedruckt am: 20.11.2024 um 11:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
ich weiß zwar nicht wer er ist, aber du unterschlägst Code.
Dein Beispiel funktioniert wie erwartet: https://tio.run/##nVVPS8MwHL3nU/wIuznL2joFYbAx8SCIB72JSFgiK2SJpNk8zH72mi ...
ich weiß zwar nicht wer er ist, aber du unterschlägst Code.
Warum addiert er die Zahlen für 2020, 2023 und 2025 bei allen und nicht nur bei Ordered, Modified oder Cancelled?
Dein Beispiel funktioniert wie erwartet: https://tio.run/##nVVPS8MwHL3nU/wIuznL2joFYbAx8SCIB72JSFgiK2SJpNk8zH72mi ...
Du verwendest überall die gleichen Objekt Referenzen von $years und $status, also die gleichen Objekte, füllst du dann eines davon, füllst du alle weil es Referenzen sind, erstelle neue Kopien von den Objekten dann sind sie individuell
https://tio.run/##jZJdS8MwFIbv8ytCKUxRy9Y6vZDCZHeC7qLejSFZkrFITUqSTqT2t9 ...
Das vorherige Beispiel im anderen Beitrag war ja nur für die reine Umwandlung in JSON, fürs individuelle Füllen müssen das natürlich auch individuelle Objekte sein sonst duplizieren sich die Werte durch die Verwendung der Referenzen 😉
https://tio.run/##jZJdS8MwFIbv8ytCKUxRy9Y6vZDCZHeC7qLejSFZkrFITUqSTqT2t9 ...
$years = [ordered]@{"2020"='';"2021"='';"2022"='';"2023"='';"2024"='';"2025"=''}
$SubscriptionSet = "ad_test","Subscription2","Subscription3"
$Status = [ordered]@{"Active"='';"Cancelled"=''}
$alldata = @{}
foreach ($subscription in $SubscriptionSet){
$alldata.$subscription = [ordered]@{
Count=''
Status=[pscustomobject]$Status
Ordered=[pscustomobject]$years
Modified=[pscustomobject]$years
Cancelled=[pscustomobject]$years
}
}
[int]$alldata.ad_test.Count += 1
[int]$alldata.ad_test.Status.Active += 2
[int]$alldata.ad_test.Status.Cancelled += 3
[int]$alldata.ad_test.Ordered.2020 += 3
[int]$alldata.ad_test.Ordered.2023 += 6
[int]$alldata.ad_test.Ordered.2025 += 7
[int]$alldata.ad_test.Modified.2020 += 1
[int]$alldata.ad_test.Cancelled.2023 += 2
$alldata | ConvertTo-JSON
Das vorherige Beispiel im anderen Beitrag war ja nur für die reine Umwandlung in JSON, fürs individuelle Füllen müssen das natürlich auch individuelle Objekte sein sonst duplizieren sich die Werte durch die Verwendung der Referenzen 😉
Du kannst dafür auch z.B. eine Klasse als Template bauen von der du dann nur Instanzen erzeugen musst, Parameter wie Jahre etc. kannst du dann an den Constructor oder benutzerdefinierte Funktionen übergeben um das Objekt mit spezifischen Eigenschaften zu erzeugen:
class myobject {
$count = 0
$status = @{
Active = 0
Cancelled = 0
}
$Ordered = @{}
$Modified = @{}
$Cancelled = @{}
myobject([string[]]$years){
foreach ($year in $years){
$this.Ordered.$year = 0
$this.Modified.$year = 0
$this.Cancelled.$year = 0
}
}
}
$data = [myobject]::new((2020..2025))
$data | Convertto-JSON