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

[玩转系统] 如何使用 PowerShell 数组

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

如何使用 PowerShell 数组


介绍

数组是一种可以一次保存多个值的数据结构。将其视为相同或不同数据类型的项目的集合或列表。数组用于许多脚本和编程语言,包括 Windows PowerShell。

让我们深入研究如何在 PowerShell 中创建和使用数组。

创建对象数组

默认情况下,数组中的每个项目都是一个对象,而不是字符串或整数等其他数据类型。以下是如何通过显式添加对象来创建对象数组的示例:

$people = @(

 [PSCustomObject]@{Name='Alice'; Age=30},

 [PSCustomObject]@{Name='Bob'; Age=25}

创建仅包含一个元素的数组

如果您只在变量中放入一个值,那么 PowerShell 将不会创建数组。为了确认这一点,我们使用两个脚本并输出它们的数据类型。

首先,我们将在 PowerShell 中创建一个包含五个元素的数组:

$array = @(1, 2, 3, 4, 5)

$array1.GetType()

现在让我们尝试使用类似的脚本来创建一个只有一个元素的数组:

$array1 = 1

$array1.GetType()

从下面的输出中可以看到,PowerShell 为第一个示例脚本创建了一个数组 (System.Array),但没有为第二个示例脚本创建数组 (System.Array)。

[玩转系统] 如何使用 PowerShell 数组

如果您想通过执行特定命令检索对象来创建数组,则此行为尤其令人担忧,因为您事先不知道结果中将返回多少对象。

要解决此问题,您可以使用 ,(逗号)运算符。如果使用逗号作为二元运算符,则创建一个普通数组;如果用作一元运算符,则数组只有一个元素。

例如,以下是我们如何获取由一个元素组成的数组:

$array1 = ,1

$array1.GetType()

我们可以通过如下所示的输出来确认数组的创建:

[玩转系统] 如何使用 PowerShell 数组

创建一个空数组

在 PowerShell 中,您还可以使用运算符 @ 创建数组(包括空数组)。如果指定@(),您将得到一个根本没有对象的数组,您可以创建一个。这是一种方便的方法,可以将变量初始化为数组,然后将对象添加到数组中,而不必担心它们的数量。

$array3 = @()

$array3.GetType()

[玩转系统] 如何使用 PowerShell 数组

创建强类型数组

默认情况下,数组的元素可以具有不同的数据类型。但您也可以创建仅接受单一指定类型的值的数组。尝试添加不同类型的值将产生错误。 以下是创建最常见的强类型数组的方法:

整数:

[int[]]$intArray = 1, 2, 3

字符串:

[string[]]$strArray = "one", "two", "three"

日期/时间:

[datetime[]]$dateArray = (Get-Date), (Get-Date).AddDays(1)

创建多维数组(矩阵)

通过使用逗号嵌套数组,您可以在行或列中创建数据的结构化排列。这里我们创建一个 3×3 矩阵:

$twoDArray=@(

@(1,2,3),

@(4,5,6),

@(7,8,9)

比较、分组、选择和排序数组

用于处理数组的其他有用的 PowerShell cmdlet 包括:

  • Compare-Object — 比较两个数组并返回差异。
  • Group-Object — 根据属性值对数组元素进行分组。
  • 选择对象 - 选择一个对象或一组对象的指定属性,也可用于从数组中选择特定数量的元素。
  • Sort-Object — 用于对仅包含一种数据类型的数组进行排序,如下所示:
$array = @(3, 1, 4, 2)
$sortedArray = $array | Sort-Object

[玩转系统] 如何使用 PowerShell 数组

循环遍历数组

为了依次处理数组中的每个元素,我们需要使用 foreach 运算符创建一个循环。例如,如果我们声明一个字符串数组并想要计算数组中每个单词的长度,我们应该运行以下脚本:

$array8 = @("Earth","Mercury","Venus","Jupiter","Saturn","Mars", "Neptune", "Pluto")
foreach ($array in $array8) {
"$array = " + $array.length
}

结果将如下所示:

[玩转系统] 如何使用 PowerShell 数组

使用管道

PowerShell 中使用管道将一个命令的输出作为另一个命令的输入传递。使用数组时,您可以使用管道处理和操作数组中的数据,并将结果分配给新数组或修改现有数组。

这里我们将每个数组项乘以 2:

$numbers = 1,2,3,4,5

$doubled = $numbers | ForEach-Object { $_ * 2 }

[玩转系统] 如何使用 PowerShell 数组

添加到数组

PowerShell 中数组的大小一旦定义就不可变。但是,运算符 += 使您能够通过将项目附加到现有数组来创建新数组 - 本质上是创建一个新的组合数组。

$array = @(1, 2, 3)
$array += 4

[玩转系统] 如何使用 PowerShell 数组

创建一个ArrayList

对于大型数组或频繁添加,使用 += 可能会带来性能问题,因为每次使用它时,都会创建一个新数组,复制旧元素并将新元素添加到数组中。结尾。在这些情况下,您可能需要使用 ArrayList。

ArrayList 的大小是可变的,因此您可以添加或删除项目,而无需重新创建整个集合。与标准数组一样,ArrayList 可以保存不同数据类型的项。

以下是创建 ArrayList 的 cmdlet:

$array3 = New-Object System.Collections.ArrayList

从数组中删除项目

现在让我们使用 ArrayList 从数组中删除一个项目。首先我们创建一个数组。

$array5 = "one", "two", "three", "four", "five"
$array5.gettype()

现在我们将其添加到 AarrayList 中,以便我们可以轻松修改它。

[System.Collections.ArrayList]$ArrayList1 = $array5

$ArrayList1.GetType()

然后我们将使用.Remove命令。

$ArrayList1.Remove("three")

[玩转系统] 如何使用 PowerShell 数组

清除数组

没有定义的方法来删除数组,但是有几种方法可以删除数组的内容(清除它)。一种是将变量 $null 赋给数组:

$array7 = $null
$array7

这是清除数组的另一种方法:

$array = @("element1", "element2", "element3")

$array = @()

以下是清除 ArrayList 的方法:

$arrayList = New-Object System.Collections.ArrayList
$arrayList.Add("element1")
$arrayList.Add("element2")
$arrayList.Clear()

打印数组

显示数组内容的最简单方法是简单地引用数组变量。下面的示例展示了如何在数组中的每个项目之前包含文本“Element:”:

[玩转系统] 如何使用 PowerShell 数组

要写入 .txt 文件,请使用Out-File命令:

$var5 | Out-File C:scriptsarray.txt

要导出到 .csv 文件,请使用Export-Csv命令:

$var6 | Export-Csv -Path C:scriptsarray.csv

过滤数组

我们可以使用 Where-Object cmdlet 从数组中仅检索偶数:

$numbers = 1,2,3,4,5,6

$evenNumbers = $numbers | Where-Object { $_ % 2 -eq 0 }

$evenNumbers

[玩转系统] 如何使用 PowerShell 数组

或者,我们可以使用 .Where() 方法,它不需要管道:

$numbers = 1,2,3,4,5,6

$evenNumbers = $numbers.Where({ $_ % 2 -eq 0 })

$evenNumbers

检查数组的长度

要返回数组中的元素数量,请使用.length参数:

$array6 = 1,2,3,4,5,6
echo $array6.Length

[玩转系统] 如何使用 PowerShell 数组

检查数组是否包含特定值

如果您想查看数组中的任何元素是否包含特定值,请使用Contains方法。此代码将显示数组是否包含 2 或 12:

$array7 = 1,2,5,8,3,4,5
$array7.Contains(2)
$array7.Contains(12)

[玩转系统] 如何使用 PowerShell 数组

使用数组索引访问项目

与大多数编程语言一样,PowerShell 数组中的每个单独项目都可以通过索引访问。数组的索引从零开始,因此在包含三个项目的数组中,第一个项目位于索引 0,第二个项目位于索引 1,第三个项目位于索引 2。

要使用数组索引访问项目,您需要在数组变量后面的方括号中提供索引。下面的示例展示了如何创建显示第二个元素的数组:

$colors = "Red", "Green", "Blue", "Yellow"

$secondColor = $colors[1]

Write-Output $secondColor

[玩转系统] 如何使用 PowerShell 数组

您可以使用负索引从数组末尾访问项目。 -1 指最后一项,-2 指倒数第二项,依此类推。

使用连接运算符和拆分运算符

在 PowerShell 中,join 运算符用于将字符串数组附加到单个字符串中,可以选择使用指定的分隔符。这是一个没有分隔符的示例。

$array = "Power", "Shell"

$joined = $array -join ""

# Output: "PowerShell"

这是带有分隔符的情况:

[玩转系统] 如何使用 PowerShell 数组

split 运算符本质上与连接运算符相反,如下例所示:

$string = "apple,banana,grape"
$fruits = $string -split ","

[玩转系统] 如何使用 PowerShell 数组

使用替换运算符

replace 运算符用于将一个字符串替换为另一个字符串。以下是 cmdlet 结构:

<originalString> -replace <patternToFind>, <replacementString>

以下是将“Hello World”替换为“PowerShell”的示例:

$string = "Hello World"

$newString = $string -replace "World", "PowerShell"

[玩转系统] 如何使用 PowerShell 数组

数组切片

您可以通过指定范围来创建子数组,如下所示:

$array = 1,2,3,4,5,6,7,8,9

$subset = $array[3..6]

反转数组

以下是如何反转数组中元素顺序的示例:

$numbers = 1..5

[Array]::Reverse($numbers)

结论

数组是大多数脚本和编程语言中的基本数据结构,因为它们使您能够存储、检索和操作各种数据类型的项目的集合。了解数组将增强您使用 PowerShell 自动执行任务的能力。

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

取消回复欢迎 发表评论:

关灯