Connectionstring anpassen (zwischen 2 Zeichen) mit Powershell
Hallo Zusammen,
ich möchte über die Powershell einen Connectionstring anpassen.
Beispiel:
<connection.connection_string>Data Source=SERVER;Initial Catalog=DATENBANK;User Id=NUTZER;Password=PASSWORT;</connection.connection_string>
In diesem Beispiel sollen SERVER,DATENBANK,NUTZER,PASSWORT ersetzt werden, diese können beliebige Werte enthalten.
Hier wollte ich jetzt versuchen in "Source=SERVER;" alles zwischen "=" und ";" auszulesen und mit einer Variable zu ersetzen.
Und zwar hiermit:
$con = Get-Content .\Settings.xml
$con | % { $_.Replace('(?<=Source=).*?(?=;)', '$DBSERVER') } | Set-Content .\Settings.xml
und dann hiermit:
Get-Content .\Settings.xml (replace 'Source=".*?;', 'Source="$DBSERVER"') | Set-Content .\Settings.xml
Könnt ihr mir hier weiterhelfen?
ich möchte über die Powershell einen Connectionstring anpassen.
Beispiel:
<connection.connection_string>Data Source=SERVER;Initial Catalog=DATENBANK;User Id=NUTZER;Password=PASSWORT;</connection.connection_string>
In diesem Beispiel sollen SERVER,DATENBANK,NUTZER,PASSWORT ersetzt werden, diese können beliebige Werte enthalten.
Hier wollte ich jetzt versuchen in "Source=SERVER;" alles zwischen "=" und ";" auszulesen und mit einer Variable zu ersetzen.
Und zwar hiermit:
$con = Get-Content .\Settings.xml
$con | % { $_.Replace('(?<=Source=).*?(?=;)', '$DBSERVER') } | Set-Content .\Settings.xml
und dann hiermit:
Get-Content .\Settings.xml (replace 'Source=".*?;', 'Source="$DBSERVER"') | Set-Content .\Settings.xml
Fehler beim Analysieren der Befehlszeile (null).
Get-Content : Es wurde kein Positionsparameter gefunden, der das Argument "Keine Dateien ersetzt" akzeptiert.
In G:\SCRIPTS\HSD\string.ps1:13 Zeichen:8
+ $con = Get-Content .\Settings.xml (replace 'Source=".*?;', 'Data Sour ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-Content], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand
Könnt ihr mir hier weiterhelfen?
Please also mark the comments that contributed to the solution of the article
Content-Key: 461419
Url: https://administrator.de/contentid/461419
Printed on: April 25, 2024 at 15:04 o'clock
6 Comments
Latest comment
Hallo,
Gruß,
Peter
Zitat von @Oertey:
Get-Content : Es wurde kein Positionsparameter gefunden, der das Argument "Keine Dateien ersetzt" akzeptiert.
In G:\SCRIPTS\HSD\string.ps1:13 Zeichen:8
Schon mal Gelesen und darüber nachgedacht was dir Powershell sagen will? Du hast eine Fehler in dein PS1 Skript eingebaut. Und wenn jemand hier dir den Fehler beheben soll, Poste doch bitte dein Skript.Get-Content : Es wurde kein Positionsparameter gefunden, der das Argument "Keine Dateien ersetzt" akzeptiert.
In G:\SCRIPTS\HSD\string.ps1:13 Zeichen:8
Gruß,
Peter
XML Dateien bearbeitet man grundsätzlich mit einem Parser!
Also lade das XML File auch so das man es effektiv und korrekt mit einem XML-Object bearbeitet:
Da du keine weiteren Infos zur XML Datei bereitstellst, ist das mit Vorbehalt zu genießen da wir weder entsprechend definierte Namespaces noch sonstige Infos des XML Files hier sehen können...
Also lade das XML File auch so das man es effektiv und korrekt mit einem XML-Object bearbeitet:
$db = "NEUE DATENBANK"
$server = "NEUER SERVER"
$userID = "Neue User ID"
$password = "Neues Password"
$file = "D:\datei.xml"
$xml = [xml](gc $file)
$node = $xml.SelectSingleNode('//connection.connection_string')
$node.innerText = $node.innerText-replace '(?<=Data Source\s*=)[^;]+',$server
$node.innerText = $node.innerText -replace '(?<=Initial Catalog\s*=)[^;]+',$db
$node.innerText = $node.innerText -replace '(?<=User Id\s*=)[^;]+',$userID
$node.innerText = $node.innerText -replace '(?<=Password\s*=)[^;]+',$password
$xml.Save($file)
Moin,
Ganz einfach: Weil das so falsch ist:
Das erklärt Deine Fehlermeldung, denn "Keine Datei ersetzt" ist tatsächlich ein Wert, den get-content nicht an der Position verarbeiten kann. Dein Konstrukt wird so ausgewertet:
1. Auswertung der Funktion replace() -> Rückgabe siehe oben.
2. Übergabe des Werts von 1. an get-content
3. Auswertung des Befehls get-content
-path "settings.xml"
-readcount "Keine Datei ersetzt"
Und Letzteres läuft gegen die Wand. Wie das korrekt aussieht, siehst Du im Beitrag vom shellschrubber.
hth
Erik
Zitat von @Oertey:
Powershell bemängelt das Get-Content, kann es mir aber nicht erklären.
> Get-Content .\Settings.xml (replace 'Source=".*?;', 'Source="$DBSERVER"') | Set-Content .\Settings.xml
Ganz einfach: Weil das so falsch ist:
PS E:\> replace("blah","blubb")
Pfad nicht gefunden - E:\
Keine Dateien ersetzt
Das erklärt Deine Fehlermeldung, denn "Keine Datei ersetzt" ist tatsächlich ein Wert, den get-content nicht an der Position verarbeiten kann. Dein Konstrukt wird so ausgewertet:
1. Auswertung der Funktion replace() -> Rückgabe siehe oben.
2. Übergabe des Werts von 1. an get-content
3. Auswertung des Befehls get-content
-path "settings.xml"
-readcount "Keine Datei ersetzt"
Und Letzteres läuft gegen die Wand. Wie das korrekt aussieht, siehst Du im Beitrag vom shellschrubber.
hth
Erik