首页 > 解决方案 > 如何索引powershell对象中的某一行

问题描述

我是一名 powershell 初学者,尝试使用 powershell 2.0 脚本对 SerialNumbers 进行网络抓取。我不确定如何索引此列表(?)以返回序列号(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---

它显示了所有的外文本对象,并显示了两个外文本中保存的信息。已尝试将其设置为变量,并尝试使用索引

$test[0]

但返回一个空行(无错误)。有没有办法可以索引其中任何一个来显示序列号?

谢谢!

编辑:也一直在玩 foreach 循环,到目前为止没有返回

标签: powershellindexingpowershell-2.0

解决方案


当您使用 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 的序列号,我建议您在没有用于获取$test变量的 Format-List 的情况下工作


推荐阅读