PowerShell - .Json file auslesen mit dynamischen Variablen
Guten Morgen,
Ich habe ein Script erstellt womit man Daten aus einer Json file auslesen und ausgeben kann, soweit funktioniert das auch aber ich habe bisher nicht herausfinden können wie man die Daten auslesen kann, wenn diese sich in der Json file ändern ohne das Skript selbst zu ändern.
Hier das Skript:
Die Daten lese ich mithilfe von Foreach aus, allerdings klappt das bei mir nur wenn ich Diese direkt deklariere.
Hier sind die daten aus der Json file:
Ich hoffe das Ihr mir dabei helfen könnt und freue mich auf eure Antworten
Ich habe ein Script erstellt womit man Daten aus einer Json file auslesen und ausgeben kann, soweit funktioniert das auch aber ich habe bisher nicht herausfinden können wie man die Daten auslesen kann, wenn diese sich in der Json file ändern ohne das Skript selbst zu ändern.
Hier das Skript:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$objForm = New-Object System.Windows.Forms.Form
$objForm.StartPosition = "CenterScreen"
$objForm.Size = New-Object System.Drawing.Size(640,480)
$objForm.MaximizeBox = $False
$objForm.Text = "Customer Selection"
$TabForm = New-Object System.Windows.Forms.TabControl
$TabForm.Location = "20,60"
$TabForm.Size = "585,250"
$objForm.Controls.Add($TabForm)
$Tab1 = New-Object System.Windows.Forms.TabPage
$Tab1.Databindings.DefaultDataSourceUpdateMode = 0
$Tab1.UseVisualStyleBackColor = $True
$Tab1.Name = "Customer1"
$Tab1.Text = "Customer1"
$TabForm.Controls.Add($Tab1)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(200,20)
$objLabel.Size = New-Object System.Drawing.Size(1000,30)
$objLabel.Text = "Please select your customer:"
$objLabel.Font = New-Object System.Drawing.Font("Comic Sans MS",12,[System.Drawing.FontStyle]::Bold)
$objForm.Controls.Add($objLabel)
$objListBox = New-Object System.Windows.Forms.ListBox
$objListBox.Location = New-Object System.Drawing.Size(20,20)
$objListBox.Size = New-Object System.Drawing.Size(530)
$objListBox.Height = 190
$objListBox.Font = New-Object System.Drawing.Font("Comic Sans MS",12,[System.Drawing.FontStyle]::BOLD)
$Tab1.Controls.Add($objListBox)
$objForm.TopMost = $true
$array = Get-Content -Path "$env:USERPROFILE\Desktop\Customer List\Json\test-server.json" | ConvertFrom-Json
foreach ($item in $array.Customer1)
{
foreach ($Server1 in $item.Server1)
{
[void] $objListBox.Items.Add($Server1.Name)
}
foreach ($Server2 in $item.Server2)
{
[void] $objListBox.Items.Add($Server2.Name)
}
}
$objListBox.Add_SelectedIndexChanged({ })
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
Die Daten lese ich mithilfe von Foreach aus, allerdings klappt das bei mir nur wenn ich Diese direkt deklariere.
Hier sind die daten aus der Json file:
{
"customer1": {
"Domain": "Test.Domain1.com",
"Server1": {
"Name": "Test-ServerA1",
"Address": "1.2.3.4.5.6"
},
"Server2": {
"Name": "Test-ServerB1",
"Address": "6.5.4.3.2.1"
}
},
"customer2": {
"Domain": "Test.Domain2.com",
"Server1": {
"Name": "Test-ServerA2",
"Address": "10.2.21.12.1234"
},
"Server2": {
"Name": "Test-ServerB2",
"Address": "51.65.42.1246"
},
"Server3": {
"Name": "Test-ServerC2",
"Address": "1.142.532.1231"
}
}
}
Ich hoffe das Ihr mir dabei helfen könnt und freue mich auf eure Antworten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5452313198
Url: https://administrator.de/contentid/5452313198
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
4 Kommentare
Neuester Kommentar
Zitat von @AnfaengerIT:
allerdings weiß ich jetzt nicht genau, wie ich deinen Code so umformen könnte, dass mir z.b. nur der Name des Servers eines Kunden angezeigt wird.
Dafür musst du einfach weiter verschachteln (wie du es ja oben auch schon selbst getan hast), bis du bei der gewünschten Eigenschaft angelangt bist:allerdings weiß ich jetzt nicht genau, wie ich deinen Code so umformen könnte, dass mir z.b. nur der Name des Servers eines Kunden angezeigt wird.
Foreach ($Customer in ($array | gm "Customer*" -m NoteProperty).Name) {
Foreach ($Server in ($array.$Customer | gm "Server*" -m NoteProperty).Name) {
$array.$Customer.$Server.Name
}
}
BTW: "Array" ist hier natürlich eigentlich der falsche Name für die Variable, da sie kein Array, sondern ein mehrdimensionales Objekt ist.
tio.run
Gruß Thomas