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

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

作者:精品下载站 日期:2024-12-14 04:50:59 浏览:16 分类:玩电脑

PowerShell 词典 |字典在 PowerShell 中如何工作?


[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

PowerShell字典的定义

PowerShell 字典也称为哈希表或关联数组,是一种紧凑的数据结构,由键和值对组成。 Hashtable 是一个 .Net 命名空间 System.Collections.Hashtable,而字典来自一个名为 Systems.Collection.Specialized.OrderedDictionary 的 .Net 命名空间,输出的顺序将它们区分开来,有序字典具有有序输出,而 Hashtable 没有t 有有序输出。

语法:

哈希表的语法:

@{ <name> = <value>; [<name> = <value> ] ...}

有序字典的语法:

[ordered]@{ <name> = <value>; [<name> = <value> ] ...}

此 [Ordered] 属性是在 PowerShell v3.0 中引入的。

当我们创建哈希表或字典时,它以 at 符号 (@) 开头,并由大括号 {} 包围。
在大括号内,我们定义键和值。使用等号 (=) 将值分配给键,并使用分号 (‘;’) 分隔多个键值。

如果哈希表采用有序格式(字典),则应在其前面写入 [Ordered]。

字典在 PowerShell 中如何工作?

PowerShell 字典或哈希表在方式上是相同的,但唯一的区别是字典生成有序输出,而哈希表输出不按顺序。
您可以使用以下命令创建一个空哈希表,

$htable = @{}

当您检查哈希表的类型时,它的基本类型是 System。对象,它是哈希表。

$htable.GetType()

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

我们可以通过添加键及其值来简单地将值插入到哈希表中。

$htable = @{Name='Chirag';EmpID="001";City="Pune"}
$htable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

创建哈希表后,如果您想从中创建有序字典,则不能直接转换哈希表,它会抛出警报。

[Ordered]$htable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

即使我们创建一个新的空哈希表并将哈希表分配并转换给它,它也不起作用。

$dict = @{}
$dict = [ordered]$htable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

要创建字典,我们首先需要在分配值时转换 [Ordered] 哈希表,如下所示。

$htable = [Ordered]@{Name='Chirag';EmpID="001";City="Pune"}

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

输出将按照我们为其赋值的顺序出现。我们可以在这里反转类型转换。这是可能的。

$hash = [hashtable]$htable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

哈希表或字典还支持一些方法和属性来执行操作或从哈希表中检索数据。

$htable | Get-Member

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

示例

让我们讨论一下 PowerShell 字典的示例

示例#1:创建一个哈希表并添加值。

此示例创建一个存储有关特定服务的信息的服务表。

$servicetable = @{Name='Spooler'; Starttype='Manual'; Status='Disabled'}
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

输出不是输入的有序格式,因此我们创建一个字典(有序哈希表)。

$servicetable = [Ordered]@{Name='Spooler'; Starttype='Manual'; Status='Disabled'}
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

在其他示例中,我们将使用这个创建的哈希表。

示例#2:检索哈希表值和键。

要获取哈希表键,我们需要选择其属性 Key,如下所示。

$servicetable.Keys

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

要检索哈希表值,

servicetable.Values

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

要从键中检索特定值,我们可以提供键名称。

$servicetable.Name

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

示例#3:向哈希表添加新的键和值

要将新键和关联值添加到哈希表中,我们可以使用以下方法。

$servicetable += @{DisplayName='Print Spooler'}
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

上面的方法是显式方法,我们也可以使用Add()方法。

$servicetable.Add("CanStop","True")
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

示例#4:删除哈希表键

要删除哈希表键,我们需要使用Remove()方法。我们只需要在Remove()函数中提供Key即可。

$servicetable.Remove("CanStop")
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

示例#5:修改哈希表键值。

要修改特定哈希表的键值,我们只需访问该键并为其分配值即可。

$servicetable.Status = "Stopped"
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

示例#6:为哈希表键分配多个值。

我们不能直接将多个值分配给哈希表键,因为单个键被视为字符串,如下所示。

$servicetable.Name += "Winrm"
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

为了解决这个问题,我们将特定的键初始化为数组,然后创建多个值,但问题是,如果我们在创建哈希表后将键初始化为数组,则现有值将被擦除,我们需要再次创建它。

$servicetable.Name = @()
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

我们现在需要增加价值。

$servicetable.Name += "Spooler"
$servicetable.Name += "WinRM"
$servicetable

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

Name 属性现在将给出多个值。

$servicetable.Name

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

示例#7:将字符串数据转换为哈希表。

要将字符串输出转换为哈希表,我们可以使用 ConvertFrom-StringData 命令。

$stringdata = @"
Book = The Owl
Genre = Fiction
Author = Greg Truth
"@

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

要转换为哈希表,

$stringdata | ConvertFrom-StringData

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

示例#8:具有对象类型的哈希表。

在此方法中,我们将对象(具有多个键和值)存储在 Value 字段中。

$ObjectHash = @{
'PowerShell'= (Get-Process notepad++)
'Winrm' = (Get-Service WinRM)
}

输出:

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

当我们检查单个键的值时,我们可以将该值用作单独的哈希表,如下所示。

$ObjectHash.PowerShell

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

$ObjectHash.winrm

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

进一步扩大,

$ObjectHash.PowerShell.Id

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

$ObjectHash.Winrm.DisplayName

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

示例 #9:将 Hashtable 输出转换为 JSON/XML 格式。

我们可以使用 ConvertTo-JSON 或 ConvertTo-XML 命令将哈希表的输出转换为 JSON 或 XML 格式。

$servicetable | ConvertTo-Json

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

对于 XML,

$servicetable | ConvertTo-Xml

[玩转系统] PowerShell 词典 |字典在 PowerShell 中如何工作?

结论

哈希表因其灵活性而在 PowerShell 语言中大量使用。我们可以轻松地存储值、搜索值和检索值,最有用的是输出采用表格式,因此也可以转换为 JSON 格式。 ConvertFrom-StringDate 将输出转换为哈希表格式。

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

取消回复欢迎 发表评论:

关灯