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

PowerShell中在foreach循环内更新Hashtable值的问题

如何在PowerShell中更新Hashtable的每个值?

你的问题出在遍历哈希表时只获取了值,没有对应键的引用,导致无法定位到要更新的哈希表项。以下是两种可行的解决方法:

方法1:遍历哈希表的键

通过遍历键集合,你可以精准定位到每个值的位置,完成替换后重新赋值:

$mactable = [ordered]@{
    "A" = "11:22:33:XX:YY:10"
    "B" = "11:22:33:XX:YY:20"
    "C" = "11:22:33:XX:YY:30"
    "D" = "11:22:33:XX:YY:40"
    "E" = "11:22:33:XX:YY:50"
}

$octet4hex = "10"
$octet5hex = "16"

foreach ($key in $mactable.Keys) {
    # 取出对应值替换后,重新赋值给哈希表的键位置
    $mactable[$key] = $mactable[$key] -replace "XX:YY", "$octet4hex:$octet5hex"
}

# 查看更新后的结果
$mactable

方法2:使用GetEnumerator()遍历键值对

通过GetEnumerator()可以直接获取哈希表的每个键值对对象,修改其Value属性即可完成更新:

foreach ($entry in $mactable.GetEnumerator()) {
    $entry.Value = $entry.Value -replace "XX:YY", "$octet4hex:$octet5hex"
}

错误原因说明

你之前尝试的代码中,循环只遍历了$mactable.values,但从未定义$key变量,导致$mactable[$key]中的索引为null,触发了"索引操作失败"的错误。PowerShell的-replace操作不会原地修改原字符串,必须将替换后的结果显式赋值回哈希表的对应位置。

内容的提问来源于stack exchange,提问作者WatskeBart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:05:13