Я пытаюсь заменить определенную строку в нескольких logonscripts (> 2000 скриптов).заменить содержимое нескольких файлов с помощью PowerShell
Сценарий работает в текущей форме, но записывает каждый файл на диск, даже если никаких изменений не внесено, но я не хочу этого поведения. Он должен записываться на диск только в случае внесения изменений.
Это то, что у меня уже есть:
$varFiles = Get-ChildItem $varPath*.$VarEnding
foreach ($file in $varFiles)
{
(Get-Content $file) |
Foreach-Object { $_ -replace [regex]::Escape("$varFind"), "$varReplace" } |
Set-Content $file
}
И это то, что я уже пробовал, но мне кажется, что это не представляется возможным использовать, если в трубопроводных команд:
$varFiles = Get-ChildItem $varPath*.$VarEnding
foreach ($file in $varFiles)
{
$control = $file
(Get-Content $file) |
Foreach-Object { $_ -replace [regex]::Escape("$varFind"), "$varReplace" } |
If($control -ne $file){Set-Content $file}
}
переменные $ varPath, $ varEnding, $ varFind и $ varReplace определяются несколькими командами Read-Host в начале скрипта.
Я надеюсь, что вы, ребята, можете помочь мне :)
Благодарим за предложение, но я использую PS v2, поэтому этот, к сожалению, не работает для меня. У вас есть способ добиться этого в PS v2? –
Я просто удалил атрибут -raw из Get-Content, чтобы использовать его на PS v2, и он работал как шарм на моих 10 тестовых файлах. Большое спасибо! :) –
@ LöwäCent Рад это слышать; Я добавил примечание re '-Raw' к ответу. – mklement0