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