Parse objek parse / string

1

Mempelajari PowerShell, mencoba mencari tahu bagaimana menguraikan nilai pertama dari resultset ini:

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

Biasanya saya hanya mencarinya, tetapi saya tidak tahu apakah {x, x} adalah tipe data standar di Powershelldaratan.

Apakah saya harus melakukan penguraian string kasar, atau adakah perintah standar untuk mengekstrak yang pertama, seperti:

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

(Saya baru saja membuat bagian senar pilih. Saya tersesat.)

dthree
sumber
Anda dapat mencoba membuat tupple: blogs.technet.com/b/heyscriptingguy/archive/2014/09/02/... Kemudian Anda dapat mengaksesnya dengan $ var.Item1 atau $ var.Item2
Frank Thomas
Sudah mencoba itu, sepertinya tidak menguraikannya. Sepertinya IPAddressessepotong tuple sudah, jadi Anda tidak bisa memecahnya lebih jauh dari itu.
dthree

Jawaban:

1

Inilah yang saya miliki sejauh ini:

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

Mengembalikan yang pertama.

dthree
sumber
0

Coba seperti ini:

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

Mencoba

$myResultSet | Select-Object -First 1 IPAddress

Kumpulan hasil Anda adalah kumpulan dari beberapa jenis. The Select-Objectcmdlet mengambil item pertama dalam koleksi itu dan kemudian menyaring untuk hanya IPAddressproperti yang kemudian ditampilkan.

Pada mesin saya, output dari perintah di atas terlihat seperti ini. Kemungkinan Anda akan berbeda karena alamat yang dikembalikan akan berbeda

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

Anda mendapatkan tabel karena secara default PowerShell menempatkan output melalui Format-Tableuntuk membuat tampilan yang bagus.

Untuk mengakses hanya alamat IP itu sendiri, Anda dapat memodifikasi ekspresi sedikit:

$myResultSet.IPAddress|Select-Object -First 1

atau, dengan menggunakan notasi titik dan indeks ke dalam koleksi Anda dapat menghindari menggunakan Select-Objectsepenuhnya seperti:

$myResultSet[0].IPAddress

Di atas merujuk langsung ke IPAddressproperti item pertama dalam $myResultSetkoleksi, yang memiliki indeks nol karenanya$myResultSet[0]

Salah satu dari ini akan mengembalikan hanya alamat IP itu sendiri seperti:

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

Crippledsmurf
sumber
0

Pertama, Anda tidak perlu menebak apa jenisnya IPAddresses, Anda bisa mendapatkannya dengan mudah seperti ini:

$myResultSet[0].IPAddresses.GetType()

Mungkin itu akan menjadi semacam koleksi (array) , sehingga Anda dapat menggunakan Select-Objectdengan ExpandPropertyparameter:

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

Atau Anda dapat menggunakan operator dereference properti dan \ atau indeks seperti yang disarankan Crippledsmurf

beatcracker
sumber