You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中JSON转Hashtable后无法修改Server2描述,求解决方案

问题分析与解决思路

核心问题

你错误理解了ConvertFrom-Json -AsHashtable的返回结构:原始数据是哈希表数组,转换后得到的依然是包含3个独立哈希表的数组,而非一个以Hostname/Description为键、对应值为数组的大哈希表。$Hashtable.Hostname这种写法是PowerShell的成员枚举特性,会临时生成所有元素的Hostname属性数组,但这个数组和原哈希表数组无关,修改它自然不会影响原始数据。

解决步骤

  1. 定位到数组中Hostname为Server2的目标哈希表
  2. 直接修改该哈希表的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:39:52