Powershell анализирует объект/строку

Powershell анализирует объект/строку

Изучаю PowerShell, пытаюсь выяснить, как проанализировать первое значение из этого набора результатов:

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

Обычно я бы просто посмотрел, однако я не знаю, является ли {x, x} стандартным типом данных в PowershellLand.

Нужно ли мне делать грубый разбор строки или есть какая-то стандартная команда для извлечения первой, например:

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

(Я только что составил часть строки «выбор». Я запутался.)

решение1

Вот что у меня есть на данный момент:

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

Возвращает первый.

решение2

Попробуйте вот так:

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

решение3

Пытаться

$myResultSet | Select-Object -First 1 IPAddress

Ваш набор результатов — это коллекция некоторого типа. Select-ObjectКомандлет берет первый элемент в этой коллекции, а затем фильтрует только IPAddressсвойство, которое затем отображается.

На моей машине вывод команды выше выглядит так. У вас, скорее всего, будет отличаться тем, что возвращаемый адрес будет другим

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

Вы получаете таблицу, потому что по умолчанию PowerShell выводит выходные данные, Format-Tableчтобы сделать их удобными для отображения.

Чтобы получить доступ только к самому IP-адресу, можно немного изменить выражение:

$myResultSet.IPAddress|Select-Object -First 1

или, используя точечную нотацию и индекс в коллекции, вы можете Select-Objectполностью избежать использования, например, так:

$myResultSet[0].IPAddress

Вышеизложенное относится непосредственно к IPAddressсвойству первого элемента в $myResultSetколлекции, который имеет индекс ноль, следовательно$myResultSet[0]

Любой из них вернет только сам IP-адрес, например:

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

решение4

Во-первых, вам не нужно гадать, какой IPAddressesэто тип, вы можете легко узнать его следующим образом:

$myResultSet[0].IPAddresses.GetType()

Вероятно, это будет что-то вродеколлекция (массив), поэтому вы можете использовать Select-Objectс ExpandPropertyпараметром:

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

Или вы можете использоватьоператор разыменования свойстваи\или индекс какCrippledsmurfпредложенный

Связанный контент