[玩转系统] PowerShell - 通过哈希表中的键获取值 [11 种方法]
作者:精品下载站 日期:2024-12-14 05:26:21 浏览:14 分类:玩电脑
PowerShell - 通过哈希表中的键获取值 [11 种方法]
通过单个键获取单个值
我们可以在 PowerShell 中使用以下方式通过哈希表中的单个键获取单个值:
- 索引器符号
.Item()
方法- 点符号
Where-Object
Cmdlet
使用索引器表示法
使用方括号 ([]
) 表示的索引器符号在 PowerShell 的 HashTable 中按键获取值。
使用索引器符号:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$value = $hashTable['Name']
Write-Output $value
输出 :
PowerShell
我们创建了一个包含两个键值对的哈希表,使用 PowerShell
的 Name
和使用 7.3
的 Version
,并保存它在$hashTable
中。然后,我们使用索引器符号 ([]
) 通过指定键来获取其值,并将其保存在 $value
变量中。最后,我们使用 Write-Output cmdlet 在控制台上显示 $value
变量的值。
我们还可以使用 Write-Output cmdlet 将给定对象写入管道。如果此 cmdlet 是管道中的唯一命令或最后一个命令,则对象将显示在控制台上。它将对象发送到主管道,即输出流
,也称为成功管道
;我们通常使用此 cmdlet 在控制台上显示对象和字符串。
使用 .Item()
方法
使用.Item()
方法通过哈希表中的键获取值。
使用 .Item() 方法:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$value = $hashTable.Item('Name')
Write-Output $value
输出 :
PowerShell
此代码示例使用与前面的代码相同的哈希表。在这里,我们使用了 .Item()
方法,该方法将键作为参数并返回我们存储在 $value
变量中的相应值。
此 $value
随后用于使用 Write-Output
cmdlet 在控制台上打印其值。使用 .Item()
并不是一种不同的方法,而是索引器表示法的便捷替代方案。
使用点表示法
使用.
表示的点表示法通过哈希表中的键获取值。
使用点符号:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$value = $hashTable.Name
Write-Output $value
输出 :
PowerShell
上面的示例也类似于最后两个代码片段,使用相同的哈希表并使用 Write-Output
cmdlet 写入检索到的值。唯一的区别是我们使用点表示法来访问指定键的值。
使用 Where-Object
Cmdlet
使用 Where-Object
cmdlet 按哈希表中的键获取值。
使用Where-Object Cmdlet:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$hashTable.GetEnumerator() | Where-Object {$_.Key -eq 'Name'}
输出 :
Name Value
---- -----
Name PowerShell
对于此代码,我们使用 GetEnumerator() 方法获取 $hashTable
的枚举器,该枚举器用于迭代哈希表的键值对。然后,枚举器通过管道传输到 Where-Object
cmdlet,该 cmdlet 根据指定条件 $_.Key -eq 'Name'
过滤哈希表,仅返回键值对,其中键等于'Name'
。请记住,-eq
是不区分大小写的运算符。
它返回一个对象,其中包含键 'Name'
和值 'PowerShell'
的键值对(请参阅上面的输出)。当我们想要根据特定的键来过滤哈希表的键值对时,我们可以使用上面的解决方案。如果您仅对值感兴趣,则可以使用 .Value
属性,如下所示。
使用Where-Object Cmdlet:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
($hashTable.GetEnumerator() | Where-Object {$_.Key -eq "Name"}).Value
输出 :
PowerShell
通过多个键获取多个值
我们可以在PowerShell中使用以下不同的方法通过哈希表中的多个键获取多个值:
-match
运算符ForEach-Object
Cmdlet- 键数组
使用 -match
运算符
使用 -match
运算符在 PowerShell 中通过哈希表的多个键获取多个值。
使用 -match 运算符:
$hashTable = @{
'FirstName' = 'John'
'LastName' = 'Williamson'
'Course' = 'PowerShell'
}
$hashTable.GetEnumerator() | Where-Object {$_.Key -match 'Name'}
输出 :
Name Value
---- -----
FirstName John
LastName Williamson
此代码示例与我们使用 -eq
运算符通过键获取值的代码示例相同,但我们将 -eq
替换为 - match
运算符用于过滤与模式 Name
匹配的多个键。请注意,-match
运算符不区分大小写,这意味着 Name
、name
和 NAmE
都是相同的。
使用 ForEach-Object
Cmdlet
使用 ForEach-Object
Cmdlet 通过 PowerShell 中的哈希表中的多个键获取多个值。
使用 ForEach-Object Cmdlet:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
'OS' = 'Windows'
}
$hashTable.GetEnumerator() | ForEach-Object {
if ($_.Key -eq 'Version') {
Write-Output $_.Value
}
if ($_.Key -eq 'OS') {
Write-Output $_.Value
}
}
输出 :
7.3
Windows
我们再次创建了一个具有三个键值对的哈希表。接下来,我们使用 GetEnumerator()
方法获取枚举器对象来迭代 $hashTable
的每个键值对。
然后使用 ForEach-Object
cmdlet 对该枚举器进行管道传输,以循环键值对,并在脚本块(用 {}
表示)内检查是否key 等于使用 -eq
运算符的 'Version'
或 'OS'
。
如果为 True
,则使用 Write-Output
cmdlet 写入指定键的值。当您想要从哈希表中过滤特定的键值对并输出它们的值时,此解决方案会很有帮助。但是,请记住,ForEach-Object
将迭代所有键值对;如果您有一个很大的哈希表,那么就性能而言,这可能是一项昂贵的操作。
使用键数组
使用键数组通过哈希表中的多个键获取多个值。
使用键数组:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$keys = @('Name','Version')
$values = $hashTable[$keys]
Write-Output $values
输出 :
PowerShell
7.3
在这里,我们使用 @()
表示的数组运算符来创建一个包含键('Name'
和 'Version'
)作为数组的数组元素。然后,我们将此数组保存在 $keys
变量中,并传入索引器符号 ([]
) 以获取值数组,并将其保存在 $中value
数组供以后使用。
注意: 并不强制使用数组运算符来创建数组,但您可以使用 $keys=('Name', 'Version')
或 $keys='名称', '版本'
也是如此。
获取带/不带键的所有值
我们可以在 PowerShell 中使用以下方法来获取哈希表中带/不带键的所有值:
ForEach
循环Where-Object
Cmdlet
使用 ForEach 循环
使用 ForEach
循环获取 PowerShell 中哈希表的相应键的所有值。
使用 ForEach 循环:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
'OS' = 'Windows'
}
ForEach($key in $hashTable.Keys){
$message = '{0} = {1}' -f $key, $hashTable[$key]
Write-Output $message
}
输出 :
Name = PowerShell
Version = 7.3
OS = Windows
在这里,我们使用 ForEach 语句(也称为 ForEach
循环)来遍历 $hashTable.Keys
返回的所有键的集合。
对于每个键,我们使用字符串格式化运算符 (-f
) 创建了一个格式为 "key=value"
的字符串,其中 "key"
> 是循环中的当前键,"value"
是哈希表中与该键关联的值。然后,我们使用 Write-Output
cmdlet 将消息输出到控制台。
请注意,有更紧凑的形式为我们提供了相同的结果,并带有标题以便清楚地理解。为此,我们可以使用以下内容:
打印完整的哈希表:
$hashTable
输出 :
Name Value
---- -----
Name PowerShell
Version 7.3
OS Windows
或者
打印完整的哈希表:
$hashTable.GetEnumerator()
输出 :
Name Value
---- -----
Name PowerShell
Version 7.3
OS Windows
使用 Where-Object
Cmdlet
使用 Where-Object
cmdlet 获取 PowerShell 中哈希表的所有不带键的值。当我们想要以对象的形式获取所有值时,这种方法非常有用。
使用Where-Object Cmdlet:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
'OS' = 'Windows'
}
$hashTable.PSObject.Properties | Where-Object {$_.Name -eq "Values"} | Select Value
输出 :
Value
-----
{PowerShell, 7.3, Windows}
创建具有三个键值对的哈希表后,它访问了 $hashTable
对象的 PSObject
属性及其 Properties
集合。然后,它通过管道传输到 Where-Object
以按属性名称 'Values'
过滤属性集合,然后选择该属性的 Value
属性被过滤的对象。要理解上述命令,请查看以下屏幕截图。
或者,我们可以使用 $hashTable.Values 来仅获取值;这个命令更简单。
到目前为止,我们已经学会了如何通过一个键获取一个值,通过多个值获取多个键,以及如何通过哈希表获取所有带键和不带键的值;如果我们需要从包含嵌套键的哈希表中获取值怎么办?让我们看看如何解决这个问题。
获取嵌套键的嵌套值
我们可以在PowerShell中使用以下方式来获取哈希表中嵌套键的嵌套值:
- 索引器符号
- 用户自定义函数
使用索引器表示法
使用索引器表示法通过 PowerShell 获取哈希表中嵌套键的值。
使用索引器符号:
$hashtable = @{
'StudentID' = 11239
'Name' = @{
'FirstName' = 'John'
'LastName' = 'Williamson'
}
}
$value = $hashtable['Name']['FirstName']
Write-Output $value
输出 :
John
我们已经在本文的第一个方法中了解了索引器表示法。对于上面的代码,我们将其与嵌套键一起使用,这意味着它首先定位 'Name'
键,然后在 'Name'
键中,它定位 'Name'
键>'FirstName' 来检索值。我们可以添加更多索引符号以进行更深入的研究。例如:
使用索引器符号:
$hashtable = @{
'StudentID' = 11239
'Addresses' = @{
'permanentAddress' = @{
'City' = 'Lahore'
'Country' = 'Pakistan'
}
'temporaryAddress' = @{
'City' = 'Multan'
'Country' = 'Pakistan'
}
}
}
$hashtable['Addresses']['permanentAddress']['City']
$hashtable['Addresses']['temporaryAddress']['City']
输出 :
Lahore
Multan
使用用户定义函数
要使用 PowerShell 通过哈希表中的键获取值:
- 创建一个名为
GetValueByKey
的函数来搜索键的值,即使该值是嵌套哈希表 - 创建一个哈希表。
- 通过传递两个参数来调用第一步创建的函数;第一个是哈希表对象,第二个是要检索其键的键。
使用用户定义的函数:
function GetValueByKey {
param (
[hashTable] $hashTable,
[string] $key
)
$hashTable.GetEnumerator() | ForEach-Object {
if ($_.Key -eq $key) {
Write-Output $_.Value
}
elseif ($_.Value -is [hashTable]) {
Get-ValueByKey $_.Value $key
}
}
}
$hashTable = @{'Name' = 'PowerShell'; 'Version' = 7.3; 'OS' = 'Windows'}
GetValueByKey $hashTable 'Name'
输出 :
PowerShell
对于这种方法,我们创建了一个名为 GetValueByKey
的函数,它接受两个参数:
$hashTable
- 哈希表对象$key
- 表示要在哈希表中搜索的键的字符串值
然后,该函数使用哈希表对象的 GetEnumerator() 方法来迭代哈希表中的每个键值对。对于每一对,它检查键是否等于搜索到的键,如果是,则使用 Write-Output
cmdlet 将相应的值写入输出。
如果键的值是哈希表,则该函数将递归调用自身,并将嵌套哈希表和搜索键作为参数传递。这也允许该函数在嵌套哈希表中搜索键。即使该值是嵌套哈希表的值,该函数也会搜索键的值。
值得注意的是,该函数将输出它从输入哈希表及其嵌套哈希表中找到的所有匹配键值。如果您只需要第一个匹配的键值,可以将 Write-Output
cmdlet 替换为 return
语句。
这就是如何在 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