2016-06-10 3 views
0

Ich suche nach 2 Vorkommen einer bestimmten Zeichenfolge, aber jeweils um eine Daten zu ersetzen.PowerShell: Ändern Sie 2 spezifische Zeichenfolge in .ini

Hier wird die Datei mit 2 Zeilen:

[SERVER1]

NAME = SERVER1 \ SQLEXPRESS

ODBCLINK idms =

USER = idms

PSW = idms

[SERVER2]

NAME = SERVER2 \ SQLEXPRESS

ODBCLINK = backupidms

USER = idms

PSW = idms

Im Moment habe ich diesen Code:

Get-Content ".\test.ini") | ForEach-Object { $_ -replace ".+\SQLEXPRESS" , "Name = $hostname\SQLEXPRESS" } | Set-Content ".\test.ini"

Das Ziel besteht darin, dass zu haben:

[SERVER1]

NAME = Paris \ SQLEXPRESS

ODBCLINK = idms

USER = idms

PSW = idms

[SERVER2]

NAME = Nantes \ SQLEXPRESS

ODBCLINK = backupidms

USER = idms

PSW = idms

ich lesen Sie diese 2 Strings, Paris und Nantes, aus einer anderen Datei.

Test1 und TEst2 können ALieoej und PAodj45p sein. es ist willkürliche Wahl

Ich glaube, ich ein Skript benötigen eine Zeile mit sqlexpress in, zu suchen und sie durch ein Datum ändern, und das zweite Mal, wo ich es finden, ersetzen Sie es durch ein anderes Datum

+1

Mögliche Duplikat [Zeichenfolge ersetzen Dateiinhalt mit Powershell] (http://stackoverflow.com/questions/17144355/string-replace-file-content-with -powershell) – Sean

+0

Hallo Sean, ich hatte diesen Beitrag bereits gelesen, aber ich kann mein Problem nicht lösen:/ – user2342313

+0

Ihre Frage ist nicht klar. Das Beispiel, das Sie geben, ist nicht gut zu der Beschreibung, die Sie ihm geben, und der Titel der Frage ist bedeutungslos. Ich verstehe, dass Sie keine zufällige Zeichenfolge ändern möchten, aber das ist so weit wie die Klarheit geht. –

Antwort

0

Hallo ich mir eine Lösung gefunden:

rm $fichierDest 
$content = get-content $fichierSource 



    $i = 0 
    while($i -lt $content.Length - 1) 
    { 
      $line = $content[$i] 
      $line2 = $content[$i+1] 
      if($line -match "SERVER1") 
      { 
       $line2 = $line2 -Replace ".+\SQLEXPRESS" , "Name = TEST1\SQLEXPRESS" 
       add-content $fichierDest $line 
       add-content $fichierDest $line2 
       $i += 2 
      } 
      elseif($line -match "SERVER2") 
      { 
       $line2 = $line2 -Replace ".+\SQLEXPRESS" , "Name = TEST2\SQLEXPRESS" 
       add-content $fichierDest $line 
       add-content $fichierDest $line2 
       $i += 2 
      } 
      else 
      { 
       add-content $fichierDest $line 
       $i++ 
      } 
    } 
0

wie dies scheint kann Sei was du suchst. Dadurch wird die Datei test.ini erstellt, anstatt sie wie gewünscht zu bearbeiten.

Set-Content -Value "Test1 
Test2" -Path computers.txt 

(Get-Content ".\computers.txt") | ForEach-Object {"Name = $_\SQLEXPRESS" } | Set-Content ".\test.ini" 

Wo computers.txt Ihre Quelle von Computern mit SQL Express-Instanzen ist.

+0

ich werde es versuchen. ich werde kommen, um eine feeback zu geben – user2342313

+0

Das kann so sein, aber n meine ini-datei ich habe multi linie ich werde meinen ersten post bearbeiten. – user2342313

+0

Denken Sie darüber nach, welches Problem Sie lösen möchten ... Wissen Sie, dass eine Zuordnung zwischen Namen wie SERVER1 (oder was auch immer) durch Paris (oder was auch immer) in der Zeile "NAME = ..." ersetzt wird (egal wo) es passiert)? Oder weißt du, dass die erste "NAME = ..." Zeile Paris (oder was auch immer) sein wird, mit dem nächsten "NAME = ..." wird Nantes (oder was auch immer) sein? Das sind andere Probleme. Sie scheinen die zweite Situation zu beschreiben. Wenn ja, wissen Sie, dass Sie zum Beispiel den korrekten Namen "ODBCLINK = backupidms" und "ODBCLINK = idms" zuordnen? – stevlars

Verwandte Themen