Jump to content
checko0701

Problem mit einem PowerShell-Objekt

Recommended Posts

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

Share this post


Link to post
Share on other sites

Wie erzeugst Du denn Dein Object? Zeig bitte Deinen Code.

 

... und wie willst Du die ID "berechnen"?

Edited by BOfH_666

Share this post


Link to post
Share on other sites

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

Edited by checko0701

Share this post


Link to post
Share on other sites

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.

Edited by BOfH_666

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...