無効な日付を見つけて置き換えるために検索している大きなファイルがあります。REGEX 式を使用して日付を見つけ、それらが有効かどうかを判断しています。スクリプトが無効な日付を見つけた場合、日付を現在の日付に置き換える必要があります。監査のために、無効な文字列とエラーが見つかった行番号を記録する必要があります。これまでのところ(SOの事前の助けを借りて)無効な日付を見つけることができましたが、それらを正常に変更することはできませんでした.
これは、無効な日付を見つけるために使用しているコードです。1 回のパスで日付を見つけて変更するにはどうすればよいですか?
$matchInfos = @(Select-String -Pattern $regex -AllMatches -Path $file)
foreach ($minfo in $matchInfos)
{
#"LineNumber $($minfo.LineNumber)"
foreach ($match in @($minfo.Matches | Foreach {$_.Groups[0].value}))
{
if (([Boolean]($match -as [DateTime]) -eq $false ) -or ([DateTime]::parseexact($match,"MM-dd-yyyy",$null).Year -lt "1800")) {
Write-host "Invalid date on line $($minfo.LineNumber) - $match"
#Add-Content -Path $LOGFILE -Value "Invalid date on line $($minfo.LineNumber) - $match"
# Replace the invalid date with a corrected one
Write-Host "Replacing $match with $(Get-Date -Format "MM-dd-yyyy")"
#Add-Content -Path $LOGFILE -Value "Replacing $match with $(Get-Date -Format "MM-dd-yyyy")"
}
}
}