PowerShell中JSON转Hashtable后无法修改Server2描述,求解决方案
问题分析与解决思路
核心问题
你错误理解了ConvertFrom-Json -AsHashtable的返回结构:原始数据是哈希表数组,转换后得到的依然是包含3个独立哈希表的数组,而非一个以Hostname/Description为键、对应值为数组的大哈希表。$Hashtable.Hostname这种写法是PowerShell的成员枚举特性,会临时生成所有元素的Hostname属性数组,但这个数组和原哈希表数组无关,修改它自然不会影响原始数据。
解决步骤
- 定位到数组中
Hostname为Server2的目标哈希表 - 直接修改该哈希表的
Description属性
修正后的代码
# 模拟从Web服务器获取的原始数据 $Json = @( @{ Hostname = 'Server1'; Description = 'Windows2022' } @{ Hostname = 'Server2'; Description = 'Windows2012' } @{ Hostname = 'Server3'; Description = 'Ubuntu_Server' } ) $JsonData = ConvertTo-Json $Json $HashtableArray = ConvertFrom-Json $JsonData -AsHashtable # 筛选目标服务器并修改描述 $targetServer = $HashtableArray | Where-Object { $_.Hostname -eq 'Server2' } $targetServer.Description = "Windows Server" # 验证修改结果 Write-Host $targetServer.Description
备选索引定位写法
如果习惯用索引操作,也可以这么实现:
$hostIndex = $HashtableArray.IndexOf(($HashtableArray | Where-Object { $_.Hostname -eq 'Server2' })) $HashtableArray[$hostIndex].Description = "Windows Server"
内容的提问来源于stack exchange,提问作者Alexander Bressem
相关产品推荐
相关产品推荐

