Die Möglichkeit, Variablen in INI-Dateien festzulegen

1676
comp.sci.intern

Ich versuche derzeit, die Installation von Microsoft SQL Server 2012 als Skript auszuführen, und ich habe ein Problem damit, dass der Benutzer Optionen für den Installationsvorgang in meinem Powershell-Skript festgelegt hat

Da die Optionen von SQL Server in einer INI-Datei festgelegt sind, bin ich nicht sicher, wie die besagte INI-Datei am besten bearbeitet werden kann. Ich konnte mich sehen

  • Kopieren der gesamten INI-Datei in Powershell und Festlegen von Variablen innerhalb der Anführungszeichen, um sie später auszugeben, oder
  • Wenn Sie die INI-Datei separat speichern und nach jeder Zeile suchen, muss ich die Variablen als Zeichenfolge festlegen, um sie separat zu bearbeiten.

Gibt es eine elegantere Möglichkeit, mit INI-Dateien als dieser zu arbeiten? Gibt es ein Powershell-Modul zum Suchen und Ersetzen von Dateien, die ich verwenden könnte?

1
Vermutlich ist es am besten, die gesamte INI-Datei aus einer "In-Script" -Variablen, die Ihre Vorlage enthält, neu zu schreiben, da Sie dann sicherstellen können, dass der Inhalt so ist, wie Sie es benötigen (plus die vom Benutzer festgelegten Werte) ... Kinnectus vor 6 Jahren 0
"Gibt es ein" Suchen und Ersetzen "des PowerShell-Moduls für Dateien, die ich verwenden könnte?" INI-Dateien sind nur Text. Alle standardmäßigen Befehle zum Suchen und Ersetzen von PS funktionieren auf einem. Laden Sie die Datei in den Speicher, suchen und ersetzen Sie sie, und legen Sie sie in die Datei zurück. Ƭᴇcʜιᴇ007 vor 6 Jahren 0

1 Antwort auf die Frage

1
root

Behandeln Sie die .ini als Textdatei. Sagen wir, wir haben die folgenden .ini:

[section1] var1=foo1 [section2] var2=foo2 var3=foo3 

Um den Wert zu ändern, der "var2" zugewiesen ist, können Sie Folgendes tun:

(get-content .\test.ini).Replace('foo2','bar2') | Set-Content .\test.ini 

Dabei ist "bar2" der vom Benutzer definierte Wert. Um den benutzerdefinierten Wert zu übernehmen, können Sie Folgendes tun:

$ini = ".\test.ini" $userInput = Read-Host -Prompt "Enter a new value for var2" (get-content $ini).Replace('foo2',$userInput) | Set-Content $ini 

Die Art und Weise, wie Sie den Umgang mit der Ersetzung festlegen, hängt von den Daten in Ihrer jeweiligen Datei ab.

Dies ist ein bisschen zu einfach. Wenn mehrere Einträge mit `= foo2` vorhanden sind, müssen Sie auch den Wertnamen angeben. Was ist, wenn in verschiedenen Abschnitten doppelte Wertnamen vorhanden sind? Peter Hahndorf vor 6 Jahren 0