Может ли кто-нибудь помочь мне сделать этот PowerShell рекурсивным - PullRequest
0 голосов
/ 13 июля 2020
• 1000 .
$InputFiles = Get-Item "$(build.artifactstagingdirectory)/Terraform/*.tf"
$OldString  = "git::https://dev.azure.com"
$NewString  = "git::https://$(System.AccessToken)@dev.azure.com"
Write-Host $NewString
$InputFiles | ForEach {
    (Get-Content -Path $_.FullName).Replace($OldString, $NewString) | Set-Content -Path $_.FullName
}

Этот код работает с каталогом верхнего уровня, но не обрабатывает ни один из подкаталогов.

Я думал, что подстановка подстановки сработает, например,

$InputFiles = Get-Item "$(build.artifactstagingdirectory)/Terraform/**/*.tf"

но нет. Я не так уж силен в PowerShell и всегда считал его немного нелогичным, так что, возможно, это простая проблема для кого-то, кто к этому привык.

1 Ответ

1 голос
/ 13 июля 2020

Проверьте, работает ли этот сценарий для вас: (Вы можете изменить путь к папке и строки в соответствии с вашими потребностями)

$FolderPath = "$(build.artifactstagingdirectory)/Terraform/"
$OldString  = "git::https://dev.azure.com"
$NewString  = "git::https://$(System.AccessToken)@dev.azure.com"

foreach($currentFile in Get-ChildItem -Path ($FolderPath) -Include *.tf -Recurse)
{
    If (Get-Content $currentFile.FullName | Select-String -Pattern $OldString) 
    {
        (Get-Content -path $currentFile.FullName -Raw) -replace $OldString, $NewString | Set-Content $currentFile.FullName
    }
}

Write-Information "Done"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...