Objeto/cadena de análisis de Powershell

Objeto/cadena de análisis de Powershell

Aprendiendo powershell, intentando descubrir cómo analizar el primer valor de este conjunto de resultados:

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

Normalmente, simplemente lo buscaría, sin embargo, no sé si {x, x} es un tipo de datos estándar en Powershellel mundo.

¿Tengo que realizar un análisis aproximado de cadenas o existe algún comando estándar para extraer la primera, como por ejemplo:

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

(Acabo de hacer que la cadena de selección se separe. Estoy perdido).

Respuesta1

Esto es lo que tengo hasta ahora:

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

Devuelve el primero.

Respuesta2

Pruébalo así:

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

Respuesta3

Intentar

$myResultSet | Select-Object -First 1 IPAddress

Su conjunto de resultados es una colección de algún tipo. El Select-Objectcmdlet toma el primer elemento de esa colección y luego filtra solo la IPAddresspropiedad que luego se muestra.

En mi máquina, el resultado del comando anterior se ve así. Es probable que la suya difiera en que la dirección devuelta será diferente

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

Obtiene la tabla porque, de forma predeterminada, PowerShell envía la salida Format-Tablepara crear una visualización agradable.

Para acceder solo a la dirección IP, puedes modificar ligeramente la expresión:

$myResultSet.IPAddress|Select-Object -First 1

o, al usar notación de puntos y un índice en la colección, puedes evitar el uso Select-Objectpor completo de esta manera:

$myResultSet[0].IPAddress

Lo anterior se refiere directamente a la IPAddresspropiedad del primer elemento de la $myResultSetcolección, que tiene un índice de cero, por lo tanto$myResultSet[0]

Cualquiera de estos devolverá solo la dirección IP de esta manera:

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

Respuesta4

Primero, no tienes que adivinar de qué tipo IPAddresseses, puedes obtenerlo fácilmente así:

$myResultSet[0].IPAddresses.GetType()

Probablemente será algún tipo decolección (matriz), por lo que puedes usar Select-Objectcon ExpandPropertyel parámetro:

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

O puedes usaroperador de desreferencia de propiedady\o indexar comopitufo lisiadosugirió

información relacionada