Powershell使用哈希表 2


哈希表存放的是对,在哈希表中不再仅仅限制使用数字寻址,可以使用任意类型的数据类型寻址。
创建哈希表
之前使用@()创建数组,现在使用@{}创建哈希表,使用哈希表的键访问对应的值。

PS C:Powershell> $stu=@{ Name = "小明";Age="12";sex="男" }
PS C:Powershell> $stu

Name                           Value
----                           -----
Name                           小明
Age                            12
sex                            男

PS C:Powershell> $stu["Name"]
小明
PS C:Powershell> $stu["age"]
12
PS C:Powershell> $stu.Count
3
PS C:Powershell> $stu.Keys
Name
Age
sex
PS C:Powershell> $stu.Values
小明
12
男

在哈希表中存储数组

可以在创建哈希表时就使用数组,因为创建数组和哈希表的的元素关键字不冲突。一个是逗号,一个是分号。

PS C:Powershell>  $stu=@{ Name = "小明";Age="12";sex="男";Books="三国演义","围城","哈姆雷特" }
PS C:Powershell> $stu

Name                           Value
----                           -----
Books                          {三国演义, 围城, 哈姆雷特}
Name                           小明
Age                            12
sex                            男

在哈希表中插入新的键值

在哈希表中插入新的键值很方便,象定义变量一样,可以直接拿来使用

PS C:Powershell> $Student=@{}
PS C:Powershell> $Student.Name="令狐冲"
PS C:Powershell> $Student.School="华山派"
PS C:Powershell> $Student

Name                           Value
----                           -----
Name                           令狐冲
School                         华山派

哈希表值的更新和删除

如果要更新键的值,可以直接重写。如果要删除这个键值对,可以使用Remove方法,参数为Key

PS C:Powershell> $stu

Name                           Value
----                           -----
Books                          {三国演义, 围城, 哈姆雷特}
Name                           小明
Age                            12
sex                            男

PS C:Powershell> $stu.Name="赵强"
PS C:Powershell> $stu.Name
赵强
PS C:Powershell> $stu.Remove("Name")
PS C:Powershell> $stu

Name                           Value
----                           -----
Books                          {三国演义, 围城, 哈姆雷特}
Age                            12
sex                            男

使用哈希表格式化输出

在Powershell中哈希表的一个有趣的应用可以用来格式化文本输出。Powershell许多命令的输出结果都是以表格的形式,当然可以使用Format-Table自定义表格格式,例如:

PS C:Powershell> Dir | Format-Table

    Directory: C:Powershell

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2011/11/23     17:25            ABC
d----        2011/11/29     18:21            myscript

PS C:Powershell> Dir | Format-Table FullName,Mode

FullName                                                    Mode
--------                                                    ----
C:PowershellABC                                           d----
C:Powershellmyscript                                      d----
C:Powershella.html                                        -a---

上述的命令只能限制表格输出那些列,隐藏那些列。但是对于列的宽度,列标题无能为力,但是有了哈希表就可以实现更多自定义了。
表格的每一个列包含四个属性:
Expression:绑定的表达式
Width:列宽度
Label:列标题
Alignment:列的对齐方式

PS C:Powershell> $column1 = @{expression="Name"; width=30;label="filename"; alignment="left"}
PS C:Powershell> $column2 = @{expression="LastWriteTime"; width=40;label="last modification"; alignment="right"}
PS C:Powershell> ls | Format-Table $column1, $column2

filename                                              last modification
--------                                              -----------------
ABC                                                 2011/11/23 17:25:53
myscript                                            2011/11/29 18:21:28
a.html                                              2011/11/24 18:30:13
本文链接: https://www.pstips.net/powershell-using-hash-tables.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

回复 DBK 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

2 条评论 “Powershell使用哈希表

  • DBK

    求问,最后一个例子
    ls | Format-Table $column1, $column2

    如果 $column1 或 $column2 的定义不是一次性的,这条命令就会报错:
    Format-Table : 无法将 System.Management.Automation.PSObject 转换为以下类型之一 {System.String, System.Management.Automation.ScriptBlock}。

    解释一下「定义不是一次性的」意思,比如这样定义:
    $column1 = @{expression=”Name”}
    $column1.width = 30