3

J'ai le script suivant qui mettra à jour la chaîne de connexion à travers trois fichiers de configuration différents utilisés en développement.Chaînes de connexion de mise à jour PowerShell

function Main() 
{ 
pushd 
cd .. 
$aomsDir = pwd 
$configFiles = @('util\GeneratePocos.exe.config', 'src\Web.UI\web.config', 'src\Data\App.Config') 

$MyAOMSEntitiesConnStr = $env:AOMS_CONN_STR 

Write-Host 'Beginning update of Connection strings...' 

foreach($file in $configFiles) 
{ 
    $config = New-Object XML 
    $config.Load("$aomsDir\$file") 

    foreach($conStr in $config.configuration.connectionStrings.add) 
    { 
     if($conStr.name -ieq 'AOMSEntities') 
     { 
      $conStr.connectionString = $MyAOMSEntitiesConnStr 
     } 
    } 

    $config.Save("$aomsDir\$file") 
} 

Write-Host 'Completed updating connection strings for your machine.' 

popd 

}

principal

Le problème est que la chaîne de connexion doit inclure &quote; mais quand le fichier de configuration est enregistré cela devient & citation; Par conséquent, la chaîne de connexion n'est plus valide.

Est-ce que quelqu'un connaît un moyen de faire cela, j'ai pensé à faire un texte de remplacement du fichier, mais peut-être qu'il y a une manière plus propre.

Merci pour votre aide.

Répondre

3

Cette ligne permet de résoudre mon problème:

(Get-Content "$aomsDir\$file") | % {$_ -replace '"', '"'} | Set-Content -path "$aomsDir\$file" 

Il veillera à ce que " est écrit dans le fichier de configuration et permet à l'application de se connecter à la base de données.

+0

Merci beaucoup d'être de retour pour répondre à votre propre question - cela aide ceux d'entre nous qui recherchent la même chose! –

1

Cela serait attendu pour une double citation incorporée dans une valeur d'attribut délimitée par une double citation. Toute chance que vous pourriez utiliser une seule citation à la place, par exemple. 'e; (ou est-ce 'e :)?

En outre, vous pouvez simplifier la façon dont vous chargez le XML:

[xml]$config = Get-Content "$aomsDir\$file" 
+0

Merci Keithm Je vais simplifier le chargement du fichier de configuration comme vous l'avez suggéré. J'ai essayé d'utiliser un seul, mais cela ne fonctionnait pas car la configuration était alors invalide. Cela fonctionne avec le framework d'entité linq, donc j'ai besoin de " dans la chaîne de connexion. –

0

Je pense que vous devez accéder aux chaînes de connexion à l'aide de l'ensemble de System.Configuration. J'ai écrit un post sur la façon de chiffrer les chaînes de connexion lors de la construction d'un projet, en utilisant PowerShell: Encrypt App.config section using PowerShell as a Post-build event. Vous devrez l'adapter puisque votre objectif n'est pas de crypter, mais cela devrait vous aider.

+0

Merci Philippe Je vais essayer ça et vous faire savoir comment je m'entends. –