替换PowerShell中哈希表中的值

替换PowerShell中哈希表中的值,powershell,Powershell,我在PowerShell中有一个如下所示的哈希表: $table = @{ 1 = 3; 2 = 3; 5 = 6; 10 = 12; 30 = 3 } 我需要将所有“3”值替换为“4” 有没有一种好的、干净的方法可以做到这一点,而不必迭代每一对,并将每一对写入一个新的哈希表 如果我使用其他的.NET集合类,那么使用相同数据的操作会更容易吗 此操作引发“集合已修改”异常: 这将向对象添加另一个“值”成员并将其打断: $table.Value

我在PowerShell中有一个如下所示的哈希表:

$table = @{
     1 =  3;
     2 =  3;
     5 =  6;
    10 = 12;
    30 =  3
}
我需要将所有“3”值替换为“4”

  • 有没有一种好的、干净的方法可以做到这一点,而不必迭代每一对,并将每一对写入一个新的哈希表
  • 如果我使用其他的.NET集合类,那么使用相同数据的操作会更容易吗
  • 此操作引发“集合已修改”异常:

    这将向对象添加另一个“值”成员并将其打断:

    $table.Values = $table.Values -replace 3,4
    

    在对表进行迭代时不能修改它,所以先进行迭代,然后进行更新。只需将管道一分为二:

    PS>$change = $table.GetEnumerator() | ? {$_.Value -eq 3}
    PS>$change | % { $table[$_.Key]=4 }
    PS>$table
    
    Name                           Value
    ----                           -----
    30                             4
    10                             12
    5                              6
    2                              4
    1                              4
    

    上面的答案对我来说不适用,我不能把它作为一个评论。上面的单行答案没有任何作用。我正试图根据我的哈希表将单个值更改为“Off”。请注意,我编写$(backtick)的地方应该是一个文本backtick,但它弄乱了代码块。这是从中提取的哈希表。\BeepVariables.txt

    名称值
    ----                    ----
    $varawarecasound“On”
    $varEmailSound“开启”

    函数SetHash2([string]$keyword,[string]$value){
    $hash=@{}
    $hash=(获取内容。\BeepVariables.txt)。替换(“;”,“$(backtick)n”)|从StringData转换
    @($hash.GetEnumerator())|?{$\.key类似“*$keyword*”}|%{$hash[$\.value]=$value}
    $hash
    }
    SetHash2“aware”““Off”

    一行:
    @($table.GetEnumerator())|?{$\.Value-eq 3}}}%{$table[$\.Key]=4}
    的可能重复项。
    PS>$change = $table.GetEnumerator() | ? {$_.Value -eq 3}
    PS>$change | % { $table[$_.Key]=4 }
    PS>$table
    
    Name                           Value
    ----                           -----
    30                             4
    10                             12
    5                              6
    2                              4
    1                              4