Jump to content

Problem mit einem PowerShell-Objekt


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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 von checko0701
Link zu diesem Kommentar
  • Beste Lösung

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 von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...