PowerShell 中的数组是什么?
数组由一组相同数据类型或不同数据类型的元素组成。当输出包含多行时,输出或存储的变量会自动变成数组。其数据类型为 **Object[] 或 ArrayList**,基本类型为 **System.array** 或 **System.Object**。
例如:
IPConfig 的输出是一个数组。
示例
PS C:\WINDOWS\system32> ipconfig Windows IP Configuration Ethernet adapter Ethernet: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Ethernet adapter VirtualBox Host-Only Network: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::187b:7258:891b:2ba7%19 IPv4 Address. . . . . . . . . . . : 192.168.56.1 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : Wireless LAN adapter Local Area Connection* 3: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Wireless LAN adapter Local Area Connection* 5: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . :
如果将 **Ipconfig** 存储到一个变量中并检查其数据类型,则它将是 **Object[]**。
PS C:\WINDOWS\system32> $ip = ipconfig PS C:\WINDOWS\system32> $ip.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array
类似地,如果获取任何多行输出,它也只会是数组。您可以使用如下所示的比较方法检查变量是否为数组。
$a = "Hello" $a -is [Array]
输出
False
$ip = ipconfig $ip -is [Array]
输出
True
数组索引从 0 开始。例如,第一行被视为索引 0,第二行被视为索引 1,依此类推,大多数情况下都是如此。但并非一直如此。当输出显示为多个集合时,第一组输出被视为索引值 0,第二组被视为索引值 1。
您可以获取 ipconfig 输出的第二行,如下所示。
$ip = ipconfig $ip[0]
输出
Windows IP Configuration
您可以使用 **Select-String** 管道命令过滤整个输出以查找特定单词,以便显示包含该单词的行。
例如,要检查系统中可用的以太网适配器。
ipconfig | Select-String -pattern "Adapter"
输出
Ethernet adapter Ethernet: Ethernet adapter VirtualBox Host-Only Network: Wireless LAN adapter Local Area Connection* 3: Wireless LAN adapter Local Area Connection* 5: Ethernet adapter Ethernet 3: Ethernet adapter Ethernet 4: Wireless LAN adapter Wi-Fi: Ethernet adapter Bluetooth Network Connection:
类似地,您可以过滤 IPv4 地址。
ipconfig | Select-String -pattern "IPv4 Address"
输出
IPv4 Address. . . . . . . . . . . : 192.168.56.1 IPv4 Address. . . . . . . . . . . : 192.168.0.104
广告