Powershell analysiert Objekt/Zeichenfolge

Powershell analysiert Objekt/Zeichenfolge

Ich lerne Powershell und versuche herauszufinden, wie der erste Wert aus diesem Ergebnissatz analysiert wird:

IPAddresses
-----------
{10.60.50.40, fe80::5ddf:a8f4:e29c:b66}

Normalerweise würde ich es einfach nachschlagen, ich weiß jedoch nicht, ob {x, x} eine Art Standarddatentyp in PowershellLand ist.

Muss ich eine grobe Zeichenfolgenanalyse durchführen oder gibt es einen Standardbefehl zum Extrahieren des ersten, etwa:

... | Select-Object IPAddresses | Select-String [0]

(Ich habe gerade den Teil mit der Zeichenfolgenauswahl erfunden. Ich bin ratlos.)

Antwort1

Das habe ich bisher:

... Select-Object IPAddresses | ForEach {$_.IPAddresses}[0]

Gibt den ersten zurück.

Antwort2

Versuchen Sie es folgendermaßen:

$myResultSet | foreach { $_.IPAddresses[0] }

Antwort3

Versuchen

$myResultSet | Select-Object -First 1 IPAddress

Ihr Ergebnissatz ist eine Sammlung irgendeines Typs. Das Select-ObjectCmdlet nimmt das erste Element in dieser Sammlung und filtert dann nur die IPAddressEigenschaft heraus, die dann angezeigt wird.

Auf meinem Rechner sieht die Ausgabe des obigen Befehls so aus. Ihr Rechner wird wahrscheinlich anders sein, da die zurückgegebene Adresse anders ist

IPAddress                                                                                                              
---------                                                                                                              
fe80::5581:4fbc:fc22:ec79%13                                                                                           

Sie erhalten die Tabelle, weil PowerShell die Ausgabe standardmäßig durchleitet, Format-Tableum eine schöne Anzeige zu erstellen.

Um nur auf die IP-Adresse selbst zuzugreifen, können Sie den Ausdruck leicht ändern:

$myResultSet.IPAddress|Select-Object -First 1

oder Sie können die Verwendung vollständig vermeiden, indem Sie die Punktnotation und einen Index in der Sammlung verwenden, und Select-Objectzwar folgendermaßen:

$myResultSet[0].IPAddress

Das Obige bezieht sich direkt auf die IPAddressEigenschaft des ersten Elements in der $myResultSetSammlung, das einen Index von Null hat, daher$myResultSet[0]

Beide geben nur die IP-Adresse selbst zurück, wie folgt:

fe80::5581:4fbc:fc22:ec79%13

Antwort4

Erstens müssen Sie nicht raten, um welchen Typ IPAddresseses sich handelt. Sie können ihn ganz einfach wie folgt ermitteln:

$myResultSet[0].IPAddresses.GetType()

Wahrscheinlich wird es eine ArtSammlung (Array), Sie können also Select-Objectmit ExpandPropertydem Parameter verwenden:

$myResultSet | Select-Object -ExpandProperty 'IPAddresses' | Select-Object -First 1

Oder Sie verwendenEigenschaftsdereferenzierungsoperatorund\oder Index alsVerkrüppelter Schlumpfempfohlen

verwandte Informationen