PowerShell数组转哈希表:点符号可用但方括号取值为空?
PowerShell 生成单个键值对哈希表
你现在的问题是代码生成了哈希表数组,而非单个哈希表,导致方括号取值失效。具体原因和解决方法如下:
问题根源
你的代码在ForEach-Object里每次循环都新建一个哈希表,最终输出的是包含3个哈希表的数组:
# 原代码输出的是哈希表数组 ('1','2','3') | foreach {@{($_+'A') = $_}}
点符号能取到值是因为PowerShell的「成员访问枚举」特性——它会遍历数组里的每个哈希表,返回第一个匹配键的值;而方括号[]是直接对数组操作,数组没有1A这个索引,所以返回$null。
实现类似Python字典推导式的效果
要生成单个哈希表,有两种简洁写法:
方法1:初始化空哈希表,循环填充(最直观)
$hashTable = @{} ('1','2','3') | ForEach-Object { $hashTable[$_ + 'A'] = $_ }
验证取值:
PS > $hashTable.'1A' 1 PS > $hashTable['1A'] 1
方法2:用ConvertFrom-StringData快速生成(PowerShell 5.0+)
先把键值对转成字符串格式,再转换为哈希表:
$hashTable = ('1','2','3') | ForEach-Object { "$($_+'A')=$_" } | ConvertFrom-StringData
内容的提问来源于stack exchange,提问作者Yorai Levi
相关产品推荐
相关产品推荐

