powershell哈希表用键值对组织数据,支持有序([ordered]@{})与嵌套,可通过点号或中括号访问,适用于配置、json解析及管道计算属性。
powershell 中哈希表是组织结构化数据最常用、最直观的方式之一,核心在于用有意义的键(key)代替数字索引,让数据可读性强、访问快、逻辑清晰。
创建哈希表:一行定义,键值成对
用 @{} 语法直接声明,键和值用等号连接,多个键值对用分号或换行分隔:
- 键名含空格或特殊字符时,必须加单引号或双引号,例如 'Full Name' 或 "IP Address"
- 字符串值即使不含空格,也建议加引号,避免解析歧义(如 'Server01' 而非 Server01)
- 值可以是任意 PowerShell 对象:字符串、数字、数组、甚至另一个哈希表(嵌套)
示例:
$serverInfo = @{
'HostName' = 'web-prod-01';
'IP' = '192.168.1.10';
'Roles' = @('Web', 'API');
'Status' = 'Online'
}
访问与修改:两种写法,按需选用
哈希表支持两种主流访问方式,语义略有不同:
- 点号语法(.Key):适合键名是合法变量名(无空格、不以数字开头),读起来像对象属性,常用于计算属性或管道中简化输出
- 中括号语法(['Key']):通用写法,支持任意键名(包括含空格、连字符、数字开头),也支持动态键(如 $key = 'HostName'; $serverInfo[$key])
修改值同样简单:
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
$serverInfo['Status'] = 'Maintenance'
$serverInfo.Roles += 'Backup'
有序哈希表:需要固定顺序时用 [ordered]
普通哈希表不保证键的显示/遍历顺序——这是 .NET 底层实现决定的。若需严格按定义顺序保留(比如生成配置、导出 CSV 表头),使用 [ordered]@{}:
$config = [ordered]@{
Environment = 'Production';
TimeoutSec = 30;
LogPath = 'C:\Logs'
}
此时 $config.Keys 输出顺序恒为 Environment → TimeoutSec → LogPath。
实用技巧:从外部数据快速构建
哈希表常作为中间结构,高效承接外部格式数据:
- ConvertFrom-StringData:把多行“键=值”字符串转成哈希表,适合简单配置片段
- ConvertFrom-Json -AsHashtable:解析 JSON 字符串并直接生成哈希表(PowerShell 6+ 支持;Windows PowerShell 5.1 需加 -AsHashtable 参数)
- 管道中配合 Select-Object @{Name='X';Expression={...}} 使用哈希表定义计算属性,灵活定制输出字段
例如:Get-Process | Select-Object Name, @{Name='MemMB';Expression={$_.WS / 1MB}} | Where-Object MemMB -gt 100










