PowerShell笔记 - 3.数组及哈希表
本系列是一个重新学习PowerShell的笔记,内容引用自
PowerShell中文博客
数组
命令返回的数组
PS C:\> $arr = ls PS C:\> $arr.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\> $arr[0].GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DirectoryInfo System.IO.FileSystemInfo
PS C:\> $arr.Length 29
PS C:\> $arr | Select-String "pdf"
PS C:\Code> $arr -is [array] True
PS C:\Code> $arr | Select-Object -First 1 | Format-List *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\0605
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName : 0605
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : True
Mode : d-----
BaseName : 0605
Target : {}
LinkType :
Name : 0605
FullName : C:\0605
Parent : Code
Exists : True
Root : C:\
Extension :
CreationTime : 2020/6/5 11:03:21
CreationTimeUtc : 2020/6/5 3:03:21
LastAccessTime : 2020/6/5 11:03:24
LastAccessTimeUtc : 2020/6/5 3:03:24
LastWriteTime : 2020/6/5 11:03:24
LastWriteTimeUtc : 2020/6/5 3:03:24
Attributes : Directory
PS C:\Code> $arr | Where-Object {$_.Name -eq "0605"}
Directory: C:\Code
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2020/6/5 11:03 0605
创建数组
#基础数组
PS C:\Code> $arr = 1..3
PS C:\Code> $arr.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\Code> $arr 1
2
3
PS C:\Code> $arr = 1,"花",(Get-Date) PS C:\Code> $arr 1
花
2021年9月10日 14:22:47
PS C:\Code> $arr.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\Code> $arr.Count 3
#空数组
PS C:\Code> $arr = @() PS C:\Code> $arr.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
#一个元素的数组
PS C:\Code> $arr = ,"花" PS C:\Code> $arr.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\Code> $arr.Count 1
#查看其基类属性及方法
PS C:\Code> $arr.GetType().BaseType | Format-List *
操作数组
PS C:\Code> $arr = 1..5 PS C:\Code> $arr[($arr.Length -1)] 5
#倒序
PS C:\Code> $arr[($arr.Length -1)..0] 5
4
3
2
1
##顺序
PS C:\Code> $arr[0..($arr.Length -1)] 1
2
3
4
5
#指定索引
PS C:\Code> $arr[0,2,4] 1
3
5
#添加
PS C:\Code> $arr+=6 PS C:\Code> $arr[5] 6
#删除
PS C:\Code> $arr = $arr[0..2] + $arr[5] PS C:\Code> $arr 1
2
3
6
#数组在创建后已指定数组的大小,只可重新写入新的数组,而不可对数组通过索引删除
PS C:\Code> $arr.Remove(1) Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size."
At line:1 char:1
+ $arr.Remove(1)
+ ~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NotSupportedException
#因为数组是引用类型,在复制数组时应该使用Clone方法
PS C:\Code> $arr_copy = $arr.Clone() PS C:\Code> $arr_copy += 7 PS C:\Code> $arr_copy.Count 5
PS C:\Code> $arr.Count 4
#设置强类型数组
PS C:\Code> [int[]] $arr = @() PS C:\Code> $arr +=1 PS C:\Code> $arr += "2" PS C:\Code> $arr += "a" Cannot convert value "a" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $arr += "a"
+ ~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
HashMap
哈希表操作
#创建
PS C:\Code> $hash = @{ Name = "花"; Age = 3} PS C:\Code> $hash
Name Value
---- -----
Age 3
Name 花
#查看所有Key及Value
PS C:\Code> $hash.Keys Age
Name
PS C:\Code> $hash.Values 3
花
#添加或删除Key
PS C:\Code> $hash.Class = "干饭" PS C:\Code> $hash.Age = 4 PS C:\Code> $hash
Name Value
---- -----
Name 花
Age 4
Class 干饭
PS C:\Code> $hash.Remove("Class") PS C:\Code> $hash
Name Value
---- -----
Name 花
Age 4
#格式化输出
PS C:\Code> $hash | Format-Table
Name Value
---- -----
Name 花
Age