Как проиндексировать определенную строку в объекте powershell - PullRequest
1 голос
/ 13 января 2020

Я новичок в PowerShell, пытающийся создать SerialNumbers с помощью сценария PowerShell 2.0. Я не уверен, как индексировать этот список (?), Чтобы вернуть SerialNo (2390). Это команда, которую я использовал, чтобы найти, где хранится серийный номер.

PS C:\WINDOWS\system32> $currentDocument.IHTMLDocument3_getElementsByTagName("table") | Select-Object outerText | Format-List

Ниже приведен результат (--- представляет данные, подвергнутые цензуре)

outerText : Welcome to ---
            Model ---
            MAC Address---
            Serial No.2390
            Firmware Version---
            System Uptime---

            ---


            Basic Settings
            ---
            Network Settings
            ---
            Serial Settings
            ---
            Operating Settings


outerText : Model Name---
            MAC Address---
            Serial No.2390
            Firmware Version---
            System Uptime---

Показывает все объектов outerText и отображая информацию, содержащуюся в двух externalText. попытался установить это как переменную, и попытался индексировать, используя

$test[0]

, но возвращает пустую строку (без ошибок). Есть ли способ, которым я могу проиндексировать любой из них, чтобы отобразить серийный номер?

Спасибо!

edit: также играл с циклами foreach, пока ничего не возвращается

1 Ответ

0 голосов
/ 13 января 2020

Когда вы используете Format-List, вы конвертируете свой тип в object [], который теряет часть информации, которую вы можете использовать для доступа к переменным.

Простой пример такого поведения:

$var1 = Get-Process winlogon
$var2 = Get-Process winlogon | Format-List

Write-Output "Handle for var1 -> $($var1.Handles)"
Write-Output "Handle for var2 -> $($var2.Handles)"

Можно ожидать, что выходные данные обоих переменных var1 и var2 будут одинаковыми, но, что интересно,

Выходные данные

Handle for var1 -> 258
Handle for var2 -> 

и типы также меняются

-> $var1.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                                  
-------- -------- ----                                     --------                                                                                                                                                                                  
True     False    Process                                  System.ComponentModel.Component                                                                                                                                                           

-> $var2.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                                  
-------- -------- ----                                     --------                                                                                                                                                                                  
True     True     Object[]                                 System.Array                  

Предложение

Если вы хотите иметь возможность получить доступ к серийным номерам OuterText, я бы предложил работать без Format-List, который вы используете при получении переменной $test

...