[玩转系统] 如何使用 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'))
正如您在上面的屏幕截图中看到的,该数组包含一个字符串、一个整数和另一个数组。
为了防止这种情况,我们可以创建一个强类型数组。这意味着我们定义了数组可以包含什么类型的数据。要创建类型化数组,我们需要将数组类型放在变量前面的括号中。
例如,要创建一个只能包含整数的数组:
[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 中脚本编写和自动化的重要工具。它们允许您自动执行脚本中的重复任务,并以有效的方式处理大量数据。
我希望这篇文章对您有用,如果您有任何疑问,请在下面发表评论。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag