2016-04-20 13 views
0

Ich habe zwei Session State-Knoten in einer Konfigurationsdatei auskommentiert. Wie entferne ich nur den ersten Session State-Knoten mit Powershell?Mit PowerShell eine Zeile in einer Konfigurationsdatei auskommentieren

<configuration> 
<system.web> 
    <!--<sessionState allowCustomSqlDatabase="true" mode="SQLServer" sqlCommandTimeout="150" sqlConnectionString="SessionConnectionString"></sessionState>--> 
    <!--sessionState mode="InProc" timeout="500"></sessionState--> 
</system.web> 
</configuration> 
+0

Haben Sie irgendwas versucht? –

Antwort

0

können Sie regex verwenden für diese

(gc settings.xml -Raw) -replace "<!--(.+?)-->",'$1' 

Dies könnte in einigen Rand Fällen problematisch sein, in dem Fall, dass Sie XML-Kommentare über diesen Code bekommen konnte:

([xml](gc settings.xml)).configuration.'system.web'.'#comment' 

Dann können Sie AppendChild() zu einem geeigneten Ort, der den XML-Knoten aus der Kommentarzeichenfolge erstellt.

0

Einfache Möglichkeit: Textmanipulation mit Regex. Finde in der Zeile, die du auskommentieren möchtest, etwas Einzigartiges. Ex:

#Get-Content is in () to read the whole file first so we don't get file in use-error when writing to it later 
(Get-Content -Path web.config) -replace '<!--(<sessionState allowCustomSqlDatabase.+?)-->', '$1' | Set-Content -Path web.config 

Demo @ Regex101

harte Art und Weise: Xml-Manipulation. Ich habe den ersten Kommentar hier genommen, aber Sie könnten leicht nach einem bestimmten Knoten suchen, wie wir oben getan haben, wenn das besser ist:

+0

Mit der XML-Manipulationsmethode wird der Fehler 'Konstruktor nicht gefunden' ausgegeben. Kann keinen passenden Konstruktor für den Typ System.IO.StringReader finden '- Ich habe viele Methoden ausprobiert, um diesen Knoten unkommentiert zu bekommen, aber alle scheinen an der ersten Hürde zu scheitern ... die kommentierte Zeile als Knoten zu erkennen –

+0

Das liegt wahrscheinlich daran, dass Sie ' $ commentnode.value' ist null (Sie haben keinen Kommentar gefunden, der Ihrer where-Anweisung entspricht). Warum nicht den Text ersetzen? Normalerweise wissen Sie (haben Sie eine eindeutige Kennung) für den Knoten, den Sie ändern möchten. Ich habe beide Methoden mit deiner Beispieleingabe getestet, bevor du antwortest. –

Verwandte Themen