当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 阵列 - 完整指南

作者:精品下载站 日期:2024-12-14 03:44:05 浏览:14 分类:玩电脑

如何使用 PowerShell 阵列 - 完整指南


PowerShell 数组用于存储项目的集合。它们是 PowerShell 或任何编程语言的基本组成部分,因为它们允许您将项目集合存储和构造到单个变量中。然后,我们可以使用该数组对数组中的每个项目执行各种任务。

在本文中,我们将了解 PowerShell 数组,以及如何在 PowerShell 脚本中使用它们。

PowerShell 阵列

在了解如何在 PowerShell 中创建和使用数组之前,我们首先简要了解一下使用数组的优点。数组在每种编程语言中都有使用。它们使您可以轻松地对多个项目执行任务。

例如,如果您想创建一个脚本来检查您的服务器是否在线。您可以使用服务器名称或 IP 地址创建一个数组,然后循环遍历数组中的每个项目,而不是为每个单独的服务器编写代码。

笔记

确保您还阅读了这篇有关哈希表以及数组和哈希表之间差异的文章

数组还可以用于对数据进行排序或结构化,这在处理较大的数据集时特别有用。

创建数组

在 PowerShell 中创建数组的最简单、最直接的方法是将多个项目分配给单个变量。例如,如果我们想创建一个水果数组,我们可以简单地这样做:

$fruits = 'apple','raspberry','kiwi'

# Result of $fruits:
apple
raspberry
kiwi

使用@() 表示法

定义或创建数组的更常见方法是使用 @() 表示法,也称为子表达式运算符。这将在括号 ( ) 内创建一个时间数组。

例如,要创建水果数组:

$fruits = @('apple','raspberry','kiwi')

结果与将多个项目分配给单个变量时的结果相同,如我们的第一个示例中所示。但我们也可以使用此方法创建一个空数组,例如:

$data = @()

# Result
$data.Count
0

创建具有特定类型的 PowerShell 数组

PowerShell 中的数组可以包含任何数据类型。甚至可以在单个数组中混合不同的数据类型。例如,我们可以创建一个包含整数、字符串甚至另一个数组的数组:

$array = @('foo',3,'bar',50,@('apple','kiwi'))

[玩转系统] 如何使用 PowerShell 阵列 - 完整指南

正如您在上面的屏幕截图中看到的,该数组包含一个字符串、一个整数和另一个数组。

为了防止这种情况,我们可以创建一个强类型数组。这意味着我们定义了数组可以包含什么类型的数据。要创建类型化数组,我们需要将数组类型放在变量前面的括号中。

例如,要创建一个只能包含整数的数组:

[int32[]]$ints = 10,50,30,20

其他常用的数组数据类型选项有:

  • String[] - 创建字符串数组。
  • Int[] - 用于创建整数数组。
  • Boolean[] - 布尔值数组(true 或 false)。
  • Byte[] - 用于创建字节数组。
  • Double[] - 创建双精度浮点数数组。
  • Decimal[] - 用于创建十进制数数组。
  • DateTime[] - 用于创建日期和时间数组。
  • Object[] - 创建对象数组。
  • Char[] - 用于创建字符数组。
  • Array[] - 用于创建数组的数组。

还可以创建其他数组类型,例如自定义对象类型和特定的 .NET 框架类,例如 Diagnostics.Process。

创建多维数组

多维数组是包含其他数组作为元素的数组。在 PowerShell 中创建多维数组就像创建一个数组然后将子数组作为元素添加到其中一样简单。例如,创建一个二维数组:

# Create an empty 2-dimensional array
$myArray = @()

# Add sub-arrays as elements
$myArray += @(1,2,3),@(4,5,6),@(7,8,9)

我们还可以使用逗号运算符用一行创建二维数组:

$myArray = @( (1,2,3), (4,5,6), (7,8,9) )

要访问多维数组中的元素,我们需要使用第一个(父)数组和子(嵌套)数组的索引:

# Return the third element (2) of the second array (1):
$myArray[1][2]

# Returns
6

访问和操作数组元素

现在我们知道了如何创建数组,让我们看看如何访问和使用数组内的数据。

使用数组索引访问项目

PowerShell 中的数组有一个始终从 0 开始的索引。我们可以使用此索引从数组中检索项目,只需指定括号之间的索引号即可。对于下面的示例,我们将使用以下数组:

$fruits = @("Apple", "Banana", "Cherry", "Date", "Elderberry", "Fig", "Grape", "Honeydew", "Kiwi", "Lemon")

因此,要访问数组中的第一项 Apple,我们指定索引号 0:

$fruits[0]

# Result
Apple

我们还可以通过输入多个索引号从数组中返回多个项目:

$fruits[3,7,8]

# Result
Date
Honeydew
Kiwi

另一种选择是从数组中返回一系列项目。例如,我们可以使用以下命令返回前 5 项:

$fruits[0..4]

# Result
Apple
Banana
Cherry
Date
Elderberry

最后一个值得了解的选项是,您还可以从索引向后计数。因此,要获取数组中的最后一项或最后 3 项,我们可以执行以下操作:

$fruits[-1]

# Result
Lemon

$fruits[-1..-3]

#Result
Lemon
Kiwi
Honeydew

在 PowerShell 中循环遍历数组

在 PowerShell 中使用数组或哈希表的最大优点是您可以循环遍历数组中的所有项目。这允许您对数组中的所有项目执行相同的操作。

笔记

请确保您还阅读了有关 PowerShell 中的 For-Each、Do-While another 循环的这篇文章。它将解释差异和最快的方法。

循环数组的方法有多种,但最简单的方法是将 ForEach-Object cmdlet 传递到变量后面或使用 .ForEach 方法:

$fruits | ForEach-Object {"Fruit: $_"}

# Result
Fruit: Apple
Fruit: Banana
Fruit: Cherry
Fruit: Date
Fruit: Elderberry
Fruit: Fig
Fruit: Grape
Fruit: Honeydew
Fruit: Kiwi
Fruit: Lemon

# Or:
$fruits.ForEach({"Fruit: $_"})

当您想要跟踪数组中的位置时,For 循环是一个很好的使用方法。此方法将跟踪它在数组中的索引号:

for ($i = 0; $i -le ($fruits.length - 1); $i += 1) {
  Write-Host "$($fruits[$i]) is located at index $i"
}

对 PowerShell 数组进行排序

我们可以使用 Sort-Object cmdlet 对数组中的元素进行排序。这将根据数组中的所有元素的值对它们进行排序。默认情况下,它将按字母顺序对项目进行排序。例如,要对水果数组进行排序,我们可以这样做:

$sortedFruits = $fruits | Sort-Object

我们还可以通过添加 -Descending 参数来按降序对数组进行排序:

$sortedFruits = $fruits | Sort-Object -Descending

# Result
Lemon
Kiwi
Honeydew
Grape
Fig
Elderberry
Date
Cherry
Banana

值得一提的是,Sort-Object cmdlet 不会修改原始数组,而是返回一个新的排序数组。您可以使用 -Unique 参数对数组中的重复元素进行排序和删除。

在 PowerShell 中过滤数组

我们可以使用 Where-Object cmdlet 在 PowerShell 中过滤数组。它将仅将与过滤器条件匹配的项目返回到新数组中。例如,让我们获取所有以“rry”结尾的水果:

$filteredFruits = $fruits | Where-Object {$_ -like "*rry"}

# result
Cherry
Elderberry

PowerShell 添加到数组

要将项目添加到数组中,我们需要使用 += 运算符。这将复制数组的内容并向其中添加新项目。例如,我们可以向 $fruits 数组添加一个新水果,如下所示:

$fruits += "Mango"

或者我们可以将多个项目添加到数组中,如下所示:

$fruits += "Mango", "Nectarine", "Orange"

值得高兴的是,从技术上讲,您无法在 PowerShell 中将项目添加到数组中。当你创建一个数组时,它会有一定的长度。而且该长度是固定的,因此您无法从中添加或删除项目。然而,+= 运算符复制现有数组中的所有内容并向其中添加新项目。

有些人尝试使用 .add() 方法将项目添加到数组中,但只能在 ArrayList 上使用此方法。

从数组中删除元素

从技术上讲,从数组中删除项目是不可能的,就像添加一样。因此,要从数组中删除项目,我们需要创建一个新数组并过滤掉不需要的项目。

例如,要从 $fruits 数组中删除 Banana,我们复制该数组并使用Where-Object cmdlet 过滤掉 Banana:

$fruits = $fruits | Where-Object {$_ -ne "Banana"}

PowerShell 数组列表

有一种更好的方法可以在数组中添加或删除项目。为此,我们需要使用 PowerShell ArrayList,它在“System.Collections.ArrayList”类中可用。与普通数组相比,ArrayList 的优点是我们可以在数组中添加和删除项目,而无需先复制数组。当您处理大型数据集时,这确实可以提高脚本的性能。

因此,要在 PowerShell 中创建 ArrayList,我们需要使用 New-Object cmdlet 来创建数组:

$arrayList = New-Object System.Collections.ArrayList

我们现在可以使用 .Add() 方法将项目添加到 ArrayList:

$arrayList.Add("Apple")
$arrayList.Add("Banana")

要从 ArrayList 中删除项目,我们可以简单地使用 .Remove() 方法:

$arrayList.Remove("Apple")

从 ArrayList 中检索项目与普通数组相同。您可以使用索引或使用其中一种循环方法循环遍历数组中的所有项目。

内置数组 Cmdlet

有几个内置 cmdlet 可用于执行常见的数组操作。这些 cmdlet 使使用数组变得更加容易,并允许您自动执行任务。 PowerShell 中一些最常用的内置数组 cmdlet 包括:

加入运营商

连接运算符用于将数组的元素连接成单个字符串。我们可以指定元素之间的分隔符,例如空格或逗号。例如,我们可以将 $fruits 数组的元素连接成一个字符串,如下所示:

$fruits -join ','

# Result
Apple,Cherry,Date,Elderberry,Fig,Grape,Honeydew,Kiwi,Lemon

拆分运算符

我们可以使用 split 运算符将字符串转换为数组。就像连接运算符一样,我们可以指定元素的分隔符,例如空格或逗号。因此,我们可以将水果串拆分回数组,如下所示:

$fruits = "Apple,Banana,Cherry" -split ','

更换操作员

要替换 PowerShell 数组中的元素、特定文本或字符,我们可以使用替换运算符。 -replace 运算符是一个正则表达式运算符,允许您搜索和替换数组中的文本。

例如,要将水果数组中的 Apple 替换为 Mange,我们可以执行以下操作:

$fruits = $fruits -replace "Apple","Mango"

请记住,-replace 运算符区分大小写,如果要使其不区分大小写,则应使用 -ireplace 运算符。

该运算符不限于替换数组的单个元素。它还可以替换数组所有元素中的特定字符。例如,将“e”替换为“E”:

$fruits = $fruits -replace "e","E"

# Result
ApplE
ChErry
DatE
EldErbErry
Fig
GrapE
HonEydEw
Kiwi
LEmon

总结

数组是 PowerShell 中脚本编写和自动化的重要工具。它们允许您自动执行脚本中的重复任务,并以有效的方式处理大量数据。

我希望这篇文章对您有用,如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯