私は現在、ユーザーを支援するPowerShellスクリプトを作成しています。powershell foreach - 配列項目を変更しても配列が更新されない
プログラムによって生成されたファイルをarray
に読み込んでいます。
foreach
で繰り返し、必要に応じて変更してください。
次に、変更を含むテキストを新しいファイルに書きたいと思います。
Param(
[Parameter(Mandatory=$true, Position=0, HelpMessage="pulse?")]
[string]$pulse,
[Parameter(Mandatory=$true, Position=1, HelpMessage="milimeter?")]
[string]$milimeter
)
$textfile = Get-Content C:\11111_O.jbi
foreach($string in $textfile) {
$string -match '(EC\d*=)'
if($matches) {
[string]$regex = $matches[1]
[string]$replacement = ($regex + $pulse + ',')
$string = $string -replace '(EC\d*=)', "$replacement"
}
}
$textfile | Out-File -FilePath C:\new_file.jbi
しかし、私はforeach
複数回内のコードをチェックしているにもかかわらず(それは$string
に行うことになっているものありません)。 $textfile
の出力は常に同じままです。
foreach
に変更を反映させるには、どうすれば$textfile
を更新して反映させることができますか?
私はこの2番目の例を動作させることはできません。 $ -lplace '(EC \ d * =)'、 '' $ 1 $ pulse ''を動作させることはできますが、$ pulseが数字で始まると失敗します。また、Out-Fileを追加したり、Add-Contentのために交換したりする必要があると思います。 – mjolinor
@mjolinorあなたが正しいと思うので、コードを更新して、逆参照で正しく動作するようにしましたが、この場合は追加したくないと思います。 'ForEach-Object'呼び出しの出力はすべてOut-Fileにパイプされるので、何かが見つからない限り完全な内容を含みます。 – briantist
あなたは-appendに関して正しいですが、私はまだそれがバグの可能性を置き換えると考えています。また、Foreachは本当に必要ではありません。 -Replaceは配列演算子として機能します。 – mjolinor