Часть инструкции конвейера пропускается каждую 2-ю итерацию, получение / установка явных переменных работает просто отлично. Что мне здесь не хватает?
Прокомментируйте / раскомментируйте разделы внизу скрипта, чтобы сравнить результаты в cfg.json.
param (
[string]$JSONFname = "cfg.json",
[string]$Iterations = 300
)
Function GetCfgData {
param (
[string]$JSONFname = "cfg.json",
[string]$Key = ""
)
if (-not (Test-Path $JSONFname)) {
New-Item -Name $JSONFname > $null
$JSONData = @{iteration = $Iterations}
$JSONData | ConvertTo-Json -depth 100 | Out-File $JSONFname
}
Write-Host (Get-Content $JSONFname | ConvertFrom-Json).$Key
return [string](Get-Content $JSONFname | ConvertFrom-Json).$Key
}
Function SetCfgData {
param (
[string]$JSONFname = "cfg.json",
[string]$Key = "",
[string]$Value = ""
)
$JSONData = Get-Content $JSONFname | ConvertFrom-Json
$JSONData.$Key = $Value
$JSONData | ConvertTo-Json -depth 100 | Out-File $JSONFname
}
1..100 | foreach {
# "skipped" case 1
# GetCfgData -Key "iteration" | ForEach-Object { $val= [int]$_ - 1} | SetCfgData -Key "iteration" -Value $val
# working case 2
$iter = GetCfgData -Key "iteration"
SetCfgData -Key "iteration" -Value $([int]$iter -1)
}