3

Ich habe das folgende Skript, das die Verbindungszeichenfolge über drei verschiedene Konfigurationsdateien aktualisieren wird, die in der Entwicklung verwendet werden.PowerShell Update Verbindungszeichenfolgen

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 

}

Haupt

Das Problem ist, dass die Verbindungszeichenfolge &quote; umfassen muss aber, wenn die Konfigurationsdatei wird gespeichert wird dies & quote; Daher ist die Verbindungszeichenfolge nicht mehr gültig.

Kennt jemand einen Weg, dies zu tun, dachte ich über einen Text ersetzen der Datei, aber vielleicht gibt es einen saubereren Weg.

Danke für Ihre Hilfe.

Antwort

3

Diese Linie löst mein Problem:

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

Es wird sichergestellt, dass " in die Konfigurationsdatei geschrieben und erlaubt die Anwendung auf die Datenbank zu verbinden.

+0

Vielen Dank für die Rückkehr zu Ihrer eigenen Frage - es hilft denen von uns auf der Suche nach dem gleichen Ding! –

1

Das wäre für ein in einem durch doppelte Anführungszeichen getrennte Attributwert eingebettetes Anführungszeichen zu erwarten. Jede Chance, dass Sie stattdessen ein einfaches Zitat verwenden könnten, z. 'e; (oder ist das 'e :)?

Sie können aber auch die Art und Weise vereinfachen Sie die XML laden:

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

Danke Keithm Ich werde das Laden der Konfigurationsdatei vereinfachen, wie Sie es vorgeschlagen haben. Ich versuchte mit einem einzigen quot, aber das hat nicht funktioniert, da die Konfiguration dann ungültig war. Es arbeitet mit dem LINQ-Entity-Framework, so dass ich brauche " in der Verbindungszeichenfolge. –

0

Ich denke, Sie sollten die Verbindungszeichen Zugriff auf die System.Configuration Montage verwenden. Ich schrieb einen Beitrag zum Verschlüsseln von Verbindungszeichenfolgen beim Erstellen eines Projekts mit Powershell: Encrypt App.config section using PowerShell as a Post-build event. Sie müssen es anpassen, da Ihr Ziel nicht ist zu verschlüsseln, aber es sollte Ihnen helfen.

+0

Danke Philippe Ich werde es versuchen und dich wissen lassen, wie es mir geht. –

Verwandte Themen