[玩转系统] 关于数组
作者:精品下载站 日期:2024-12-14 02:24:54 浏览:13 分类:玩电脑
关于数组
简短描述
描述数组,数组是设计用于存储项目集合的数据结构。
详细描述
数组是一种数据结构,旨在存储项目的集合。这些项目可以是相同类型或不同类型。
从 Windows PowerShell 3.0 开始,零个或一个对象的集合具有数组的一些属性。
创建并初始化数组
要创建并初始化数组,请将多个值分配给一个变量。存储在数组中的值以逗号分隔,并通过赋值运算符 (=
) 与变量名称分隔。
例如,要创建一个名为 $A
的数组,其中包含 22、5、10、8、12、9 和 80 七个数字(整数)值,请键入:
$A = 22,5,10,8,12,9,80
通过将逗号放在单个项目之前,逗号还可以用于初始化单个项目数组。
例如,要创建包含单个值 7 的名为 $B
的单个项目数组,请键入:
$B = ,7
您还可以使用范围运算符 (..
) 创建和初始化数组。以下示例创建一个包含值 5 到 8 的数组。
$C = 5..8
因此,$C
包含四个值:5、6、7 和 8。
如果未指定数据类型,PowerShell 将每个数组创建为对象数组 (System.Object[])。要确定数组的数据类型,请使用 GetType()
方法。例如:
$A.GetType()
要创建强类型数组,即只能包含特定类型值的数组,请将变量强制转换为数组类型,例如 string[]、long[] 。有关布尔计算的更多信息,请参阅 about_Booleans。
Where()
方法有一个定义。
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
笔记
该语法需要使用脚本块。如果脚本块是唯一的参数,则括号是可选的。此外,方法和左括号或大括号之间不能有空格。
Expression
是过滤所需的脚本块,mode
可选参数允许额外的选择功能,numberToReturn
可选参数允许限制从过滤器返回了多少个项目。
mode
的值必须是WhereOperatorSelectionMode 枚举值:
默认
(0
) - 返回所有项目First
(1
) - 返回第一项Last
(2
) - 返回最后一项SkipUntil
(3
) - 跳过项目直到条件为 true,返回所有剩余项目(包括条件为 true 的第一个项目)Until
(4
) - 返回所有项目,直到条件为 trueSplit
(5
) - 返回两个元素的数组- 第一个元素包含匹配项
- 第二个元素包含剩余的项目
以下示例显示如何从数组中选择所有奇数。
(0..9).Where{ $_ % 2 }
1
3
5
7
9
下一个示例显示如何选择所有非空字符串。
('hi', '', 'there').Where{ $_ }
hi
there
默认
Default
模式使用 Expression
脚本块过滤项目。
如果提供了 numberToReturn
,则它指定要返回的最大项目数。
# Get the zip files in the current users profile, sorted by LastAccessTime
$Zips = dir $env:userprofile -Recurse '*.zip' | Sort-Object LastAccessTime
# Get the least accessed file over 100MB
$Zips.Where({$_.Length -gt 100MB}, 'Default', 1)
笔记
Default
模式和 First
模式均返回第一个 (numberToReturn
) 项,并且可以互换使用。
最后的
$h = (Get-Date).AddHours(-1)
$logs = dir 'C:\' -Recurse '*.log' | Sort-Object CreationTime
# Find the last 5 log files created in the past hour
$logs.Where({$_.CreationTime -gt $h}, 'Last', 5)
SkipUntil
SkipUntil
模式会跳过集合中的所有对象,直到对象通过脚本块表达式过滤器。然后,它返回所有剩余的集合项目,而不对其进行测试。 仅测试一项通过的项目。
这意味着返回的集合包含未通过测试的通过和未通过项目。
可以通过将值传递给 numberToReturn
参数来限制返回的项目数。
$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost
直到
Until
模式反转 SkipUntil
模式。它返回集合中的ALL 项,直到某个项通过脚本块表达式。一旦项目通过脚本块表达式,Where()
方法就会停止处理项目。
这意味着您从 Where()
方法接收第一组非传递项目。 当一项通过后,其余的不会被测试或退回。
可以通过将值传递给 numberToReturn
参数来限制返回的项目数。
# Retrieve the first set of numbers less than or equal to 10.
(1..50).Where({$_ -gt 10}, 'Until')
# This would perform the same operation.
(1..50).Where({$_ -le 10})
1
2
3
4
5
6
7
8
9
10
笔记
Until
和SkipUntil
都是在不测试一批项目的前提下运行的。
Until
返回第一个BEFORE 的项目PASS。 SkipUntil
返回第一个之后第一个传递的所有项目,包括第一个传递的项目。
分裂
Split
模式将集合项拆分或分组为两个单独的集合。那些通过脚本块表达式的,以及那些不通过的。
如果指定了 numberToReturn
,则第一个集合包含传递 项,但不超过指定的值。
其余对象,甚至是那些通过表达式过滤器的对象,都会在第二个集合中返回。
$running, $stopped = (Get-Service).Where({$_.Status -eq 'Running'}, 'Split')
$running
Status Name DisplayName
------ ---- -----------
Running Appinfo Application Information
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
...
$stopped
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
...
笔记
ForEach()
和 Where()
方法都是内部成员。有关内部成员的更多信息,请参阅 about_Instrinsic_Members。
获取数组的成员
要获取数组的属性和方法,例如 Length 属性和 SetValue 方法,请使用 的 InputObject 参数Get-Member
cmdlet。
当您通过管道将数组传递给 Get-Member
时,PowerShell 一次发送一项,而 Get-Member
返回数组中每一项的类型(忽略重复项)。
当您使用 InputObject 参数时,Get-Member
返回数组的成员。
例如,以下命令获取 $a
数组变量的成员。
Get-Member -InputObject $a
您还可以通过在通过管道传输到 Get-Member
cmdlet 的值之前键入逗号 (,
) 来获取数组的成员。逗号使数组成为数组数组中的第二项。 PowerShell 一次通过管道传输一个数组,Get-Member
返回数组的成员。就像接下来的两个例子一样。
,$a | Get-Member
,(1,2,3) | Get-Member
操作数组
您可以更改数组中的元素、向数组中添加元素,以及将两个数组中的值合并到第三个数组中。
要更改数组中特定元素的值,请指定数组名称和要更改的元素的索引,然后使用赋值运算符 (=
) 指定新值元素。例如,要将 $a
数组中第二项的值(索引位置 1)更改为 10,请键入:
$a[1] = 10
您还可以使用数组的 SetValue 方法来更改值。以下示例将 $a
数组的第二个值(索引位置 1)更改为 500:
$a.SetValue(500,1)
您可以使用 +=
运算符将元素添加到数组中。以下示例演示如何向 $a
数组添加元素。
$a = @(0..4)
$a += 5
笔记
当您使用 += 运算符时,PowerShell 实际上会使用原始数组的值和添加的值创建一个新数组。如果操作重复多次或数组大小太大,这可能会导致性能问题。
从数组中删除元素并不容易,但您可以创建一个仅包含现有数组中选定元素的新数组。例如,要使用 $a
数组中的所有元素(索引位置 2 处的值除外)创建 $t
数组,请键入:
$t = $a[0,1 + 3..($a.length - 1)]
要将两个数组合并为一个数组,请使用加号运算符 (+
)。以下示例创建两个数组,将它们组合起来,然后显示组合后的数组。
$x = 1,3
$y = 5,9
$z = $x + $y
因此,$z
数组包含 1、3、5 和 9。
要删除数组,请将值 $null
分配给该数组。以下命令删除 $a
变量中的数组。
$a = $null
您还可以使用 Remove-Item
cmdlet,但分配 $null
值会更快,尤其是对于大型数组。
零或一的数组
从 Windows PowerShell 3.0 开始,零个或一个对象的集合具有 Count 和 Length 属性。此外,您还可以对一个对象的数组进行索引。此功能可帮助您避免在需要集合的命令获取的项目少于两个时发生的脚本错误。
以下示例显示不包含对象的变量的 Count 和 Length 均为 0。
PS> $a = $null
PS> $a.Count
0
PS> $a.Length
0
以下示例显示包含一个对象的变量的 Count 和 Length 均为 1。您还可以使用数组索引来访问该对象的值。
PS> $a = 4
PS> $a.Count
1
PS> $a.Length
1
PS> $a[0]
4
PS> $a[-1]
4
当您运行可返回集合或单个对象的命令时,您可以使用数组索引来访问对象的值,而无需测试 Count 或 Length 属性。但是,如果结果是单个对象(单例),并且该对象具有 Count 或 Length 属性,则这些属性的值属于单例对象,并且不适用t 表示集合中的项目数。
在以下示例中,该命令返回单个字符串对象。该字符串的长度为4
。
PS> $result = 'one','two','three','four' | Where-Object {$_ -like 'f*'}
PS> $result.GetType().FullName
System.String
PS> $result
four
PS> $result.Count
1
PS❯ $result.Length
4
如果您希望 $result
为字符串数组,则需要将变量声明为数组。
在此示例中,$result
是一个字符串数组。数组的计数和长度为1
,第一个元素的长度为4
。
PS> [string[]]$result = 'one','two','three','four' |
Where-Object {$_ -like 'f*'}
PS> $result.GetType().FullName
System.String[]
PS> $result
four
PS> $result.Count
1
PS> $result.Length
1
PS> $result[0].Length
4
System.Tuple 对象的索引支持
PowerShell 6.1 添加了对 Tuple 对象的索引访问的支持,类似于数组。例如:
PS> $tuple = [Tuple]::Create(1, 'test')
PS> $tuple[0]
1
PS> $tuple[1]
test
PS> $tuple[0..1]
1
test
PS> $tuple[-1]
test
与数组和其他集合对象不同,元组对象在通过管道或支持对象数组的参数传递时被视为单个对象。
有关详细信息,请参阅 System.Tuple。
索引实现 IDictionary TKey、TValue 的 .NET 类型
PowerShell 不会为实现通用 IDictionary
- 上一篇:[精彩网文] 如何防止关键员工离开:保留策略
- 下一篇:[玩转系统] 关于算术运算符
猜你还喜欢
- 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