checko0701 0 Geschrieben 14. Februar 2020 Melden Teilen Geschrieben 14. Februar 2020 Hallo, ich bin neu im Forum und habe gerade eine PowerShell-Schulung hinter mir. Ich komme auch ganz gut voran, aber jetzt habe ich folgendes Problem: Ich habe ein PSCustom-Objekt, welches wie folgt aussieht: ip prefixlen url --- --------- --- 1.2.3.4 32 www.web.de 10.11.12.0 24 www.google.de 10.0.0.0 8 www.youtube.de Ich möchte nun mit Hilfe eines Unterprogramms für jede Zeile des Objektes eine individuelle ID berechnen und diese in einer weiteren Property an das Objekt anhängen. Das Objekt soll danach also so aussehen: ip prefixlen url id --- --------- --- --- 1.2.3.4 32 www.web.de 23 10.11.12.0 24 www.google.de 42 10.0.0.0 8 www.youtube.de 3 Wie stelle ich das an? Ich wäre euch für Eure Hilfe sehr dankbar. Viele Grüße, checko0701 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 14. Februar 2020 Melden Teilen Geschrieben 14. Februar 2020 (bearbeitet) Wie erzeugst Du denn Dein Object? Zeig bitte Deinen Code. ... und wie willst Du die ID "berechnen"? bearbeitet 14. Februar 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
checko0701 0 Geschrieben 14. Februar 2020 Autor Melden Teilen Geschrieben 14. Februar 2020 (bearbeitet) Hallo BofH_666, Das Objekt erzeuge ich durch eine Abfrage an die Rest-Api-Schnittstelle meiner Firewall: $result = Invoke-RestMethod -Method Get -Uri $url -ContentType "application/json ; charset=utf-8" -Headers $header -DisableKeepAlive $result = $result | Select-Object -ExpandProperty attr -Property URL $url enthält die Zugriffsurl für die Firewall, $header einen hierfür angepassten header. Die ID möchte ich durch eine Datenbank-Abfrage (Die Datenbank hat auch eine REST-API-Schnittstelle) erhalten, wobei ich die Zeile mit der IP-Suche. Das Unterprogramm hierfür habe ich noch nicht geschrieben. Für dieses Beispiel reicht es erstmal, wenn ich jeder Zeile eine Zufallszahl zwischen 1 und 100 zuordnen kann. D.h.: $id = get-random -Minium 1 -Maximum 100 Ich möchte jetzt die Variable $id in das Objekt $result integrieren. Ich habe es so versucht: $result = Invoke-RestMethod -Method Get -Uri $url -ContentType "application/json ; charset=utf-8" -Headers $header -DisableKeepAlive $result = $result | Select-Object -ExpandProperty attr -Property URL foreach ($elem in $result) { $id = get-random -Minimum 1 -Maximum 100 $elem | add-member -MemberType NoteProperty -Name "ID" -Value $id } $result #Ausgabe mit der ID Allerdings sehe ich in dem Objekt $result, dass in der Property ID keine Werte stehen. Wo ist mein Fehler? Gruß, checko0701 bearbeitet 14. Februar 2020 von checko0701 Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 14. Februar 2020 Beste Lösung Melden Teilen Geschrieben 14. Februar 2020 (bearbeitet) Hmmm ... verstehe ich das richtig - diese beiden Zeilen $result = Invoke-RestMethod -Method Get -Uri $url -ContentType "application/json ; charset=utf-8" -Headers $header -DisableKeepAlive $result = $result | Select-Object -ExpandProperty attr -Property URL erzeugen also ein Objekt mit den Properties "ip","prefixLen" und "url"? Wenn dem so ist, ist eine einfache Möglichkeit, eine weitere Property hinzuzufügen, eine sogenannte "calculated property" zu verwenden (erklärt in der Hilfe zu Select-Object Example #10). Um bei Deinem Beispiel mit dem Zufall zu bleiben .... $result = $result | Select-Object -ExpandProperty attr -Property URL, @{Name = 'ID'; Expression = { get-random -Minimum 1 -Maximum 100}} Ein besseres Beispiel ist vermutlich sowas hier: $result = $result | Select-Object -ExpandProperty attr -Property URL, @{Name = 'capitalizedURL'; Expression = { $($_.URL).toUpper()}} Du benutzt also einfach das aktuelle Pipeline-Element ($_), um damit in einem Scriptblock etwas anzustellen. Wenn's was komplexeres sein soll, lohnt sich's vermutlich, vorher dafür eine entsprechende Funktion zu bauen. bearbeitet 14. Februar 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
checko0701 0 Geschrieben 14. Februar 2020 Autor Melden Teilen Geschrieben 14. Februar 2020 Hallo BOfH_666, vielen Dank für deine Hilfe. Ich habe es für meine Zwecke getestet und jetzt funktioniert es so wie es soll. Viele Grüße, checko0701 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 14. Februar 2020 Melden Teilen Geschrieben 14. Februar 2020 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.