Powershell parse object / string

1

Learning powershell, tentando descobrir como analisar o primeiro valor desse conjunto de resultados:

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

Normalmente, eu apenas procurava, no entanto, não sei se {x, x} é um tipo de dados padrão de tipos em Powershell land.

Eu tenho que fazer uma análise grosseira de strings, ou existe algum comando padrão para extrair o primeiro, como:

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

(Acabei de fazer a parte da string de seleção. Estou perdido.)

    
por dthree 04.05.2015 / 00:10

4 respostas

1

Isso é o que eu tenho até agora:

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

Retorna o primeiro.

    
por 04.05.2015 / 00:43
0

Experimente assim:

$myResultSet | foreach { $_.IPAddresses[0] }
    
por 04.05.2015 / 03:57
0

Tente

$myResultSet | Select-Object -First 1 IPAddress

Seu conjunto de resultados é uma coleção de algum tipo. O cmdlet Select-Object está recebendo o primeiro item dessa coleção e, em seguida, filtrando apenas a propriedade IPAddress que é exibida.

Na minha máquina, a saída do comando acima se parece com isso. O seu provavelmente será diferente, pois o endereço retornado será diferente

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

Você obtém a tabela porque, por padrão, o PowerShell coloca a saída em Format-Table para fazer uma boa exibição.

Para acessar apenas o próprio endereço IP, você pode modificar a expressão ligeiramente:

$myResultSet.IPAddress|Select-Object -First 1

ou, usando a notação de ponto e um índice na coleção, você pode evitar usar Select-Object inteiramente assim:

$myResultSet[0].IPAddress

O texto acima se refere diretamente à propriedade IPAddress do primeiro item na coleção $myResultSet , que tem um índice de zero, portanto $myResultSet[0]

Qualquer um destes retornará o próprio endereço IP da seguinte forma:

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

    
por 04.05.2015 / 04:56
0

Primeiro, você não precisa adivinhar qual é o tipo IPAddresses , pode obtê-lo facilmente assim:

$myResultSet[0].IPAddresses.GetType()

Provavelmente, será uma espécie de collection (array) , para que você possa usar o parâmetro Select-Object with ExpandProperty :

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

Ou você pode usar operador de cancelamento de referência de propriedade e \ ou indexar como Crippledsmurf sugerido

    
por 06.05.2015 / 12:31