我正在尝试更新哈希表条目(内容,它是一个数组),在其中找到值-但是当我尝试为$ _设置值时,它将应用于整个哈希表($ hash)中的所有条目。
$ContentArray = @($null, $null)
$Comparison | Add-Member -MemberType NoteProperty -Name "Content" -value $ContentArray
If($GetAdvancedData -eq "true"){
$Hash| ForEach-Object{
If ($_.VarianceType -ne "Missing")
{
$_.Item
$id = $_.id[0]
$elem = $_.elementName
Write-debug "Checking $elem"
Write-debug "Checking for version $id"
try{
$content = Get-VersionContent -FilteredVersionID $id
Write-debug "Content found"
Write-debug "$content"
# Various tests to try and set the value:
#ForEach ($Key in $Hash.GetEnumerator() | Where-Object {$_.id -eq $id}){$Key.Content[0] = $content}
#$Hash.Content[0] = "$content" | Where-Object {$Hash.id[0] -eq $id}
#$Hash.DiffType = "Content"| Where-Object {$_.id[0] -eq $id}
# $_.content.SetValue("$content","0")
$_.Content[0] = $content
# Reset $content to Null
$content = $null
}
catch
{
Write-debug "No content found"
}
}
}
我尝试使用SetValue通过基于另一个键值的where子句设置它,并简单地执行=语句,但是在每种情况下,它都将整个哈希表的内容设置为$ content-我觉得我必须缺少明显的东西,但我不明白为什么(如果我使用PowerShell ISE并调试$ _仅返回ForEach循环中的单个记录)
答案 0 :(得分:0)
一个愚蠢的错误-
$Hash.GetEnumerator() | Where-Object {$_.id[0] -eq $id} | foreach{$_.Content = $content,$null}
是我的把戏!