Daten zusammenfassen, dann bearbeiten und wieder trennen
Hallo allerseits!
Ich bin hier in folgender Situation:
Es sollen einige hundert Skripte ausgeführt werden. Jedes dieser Skripte benötigt dabei bestimmte Parameter. Diese sind für jedes Skript jeweils in einer Datei beschrieben. Es gibt also auch mehrere hundert solcher Dateien.
Für eine spezielle Konfiguration muss nun in jede Datei rein geschaut und die entsprechenden Parameter angepasst werden. Das ist bei so vielen Dateien einfach mega anstrengend, zumal sehr oft auch identische Parameter benötigt werden, die trotzdem mehrmals ausgefüllt werden müssen.
Das Ziel ist daher, diese benötigten Daten aller Skripte zunächst zusammen zu fassen, sie dann gebündelt anzupassen und sie wieder auf die einzelnen Skripte aufzuteilen.
Ich möchte also ein Framework oder ähnliches, dass die "Fragen" aus den einzelnen Skripten zu einem Fragenkatalog bündelt und die "Antworten" hinterher wieder auf die einzelnen Fälle verteilt.
Ich denke, ich bin nicht der erste, der vor einem solchen Problem steht. Bestimmt gibt es schon Lösungsansätze oder gar fertige Programme für so etwas. Für mich ist dieses Problem hingegen ziemlich neu.
Habt ihr denn bereits Erfahrungen mit so einem Problem gemacht? Könnt ihr mir vielleicht Stichworte oder einfach nur eure Gedanken geben, wie man das am intelligentesten anstellen könnte?
Vielen Dank und liebe Grüße!
Max
Ich bin hier in folgender Situation:
Es sollen einige hundert Skripte ausgeführt werden. Jedes dieser Skripte benötigt dabei bestimmte Parameter. Diese sind für jedes Skript jeweils in einer Datei beschrieben. Es gibt also auch mehrere hundert solcher Dateien.
Für eine spezielle Konfiguration muss nun in jede Datei rein geschaut und die entsprechenden Parameter angepasst werden. Das ist bei so vielen Dateien einfach mega anstrengend, zumal sehr oft auch identische Parameter benötigt werden, die trotzdem mehrmals ausgefüllt werden müssen.
Das Ziel ist daher, diese benötigten Daten aller Skripte zunächst zusammen zu fassen, sie dann gebündelt anzupassen und sie wieder auf die einzelnen Skripte aufzuteilen.
Ich möchte also ein Framework oder ähnliches, dass die "Fragen" aus den einzelnen Skripten zu einem Fragenkatalog bündelt und die "Antworten" hinterher wieder auf die einzelnen Fälle verteilt.
Ich denke, ich bin nicht der erste, der vor einem solchen Problem steht. Bestimmt gibt es schon Lösungsansätze oder gar fertige Programme für so etwas. Für mich ist dieses Problem hingegen ziemlich neu.
Habt ihr denn bereits Erfahrungen mit so einem Problem gemacht? Könnt ihr mir vielleicht Stichworte oder einfach nur eure Gedanken geben, wie man das am intelligentesten anstellen könnte?
Vielen Dank und liebe Grüße!
Max
Please also mark the comments that contributed to the solution of the article
Content-Key: 306019
Url: https://administrator.de/contentid/306019
Printed on: April 24, 2024 at 23:04 o'clock
8 Comments
Latest comment
Mit "Powershell" z.B. ein leichtes. Aber mit jeder halbwegs vernünftigen Programmiersprache ist so was schnell umgesetzt, sofern man Programmieren kann.
Wenn du mehr Details dazu postest können wir dir hier auch konkrete Codebeispiele dazu posten. Gibt ja genug fähige Leute hier.
Gruß skybird.
Für eine spezielle Konfiguration muss nun in jede Datei rein geschaut und die entsprechenden Parameter angepasst werden.
Ein leichtes mit einem Regex-Replace.Bestimmt gibt es schon Lösungsansätze
Sicher, nur sind die meist so speziell angepasst das du damit nicht viel anfangen könntest. Deswegen sind solche Lösungen meist immer individuell zusammengestellt welche Programmierer dann umsetzen.Wenn du mehr Details dazu postest können wir dir hier auch konkrete Codebeispiele dazu posten. Gibt ja genug fähige Leute hier.
Gruß skybird.
Das lässt sich sehr leicht machen, die Daten die du ändern willst in eine CSV-Datei mit den Überschriften.
Var_A, Var_B, Var_C, Var_D, Var_X schreiben und dann per Schleife diese Daten in die XMLs übertragen, sollte sich in max 10 Zeilen oder weniger per Powershell lösen lassen.
Var_A, Var_B, Var_C, Var_D, Var_X schreiben und dann per Schleife diese Daten in die XMLs übertragen, sollte sich in max 10 Zeilen oder weniger per Powershell lösen lassen.
Hier ein kleines Beispiel für deine oben skizzierten XMLs um die angegebenen Variablen in den XML-Dateien automatisch für alle XML-Dateien eines Ordners anzupassen:
Natürlich kann man die Variablen auch in Text- oder CSV-Dateien auslagern und daraus ins Skript zu importieren, da sind der Phantasie keine Grenzen gesetzt
Wenn deine Parameterdateien natürlich in mehreren Formaten vorliegen musst du selbstredend darauf im Skript reagieren, ist aber alles relativ einfach machbar. Powershell ist für solche Aufgaben geradezu perfekt geeignet.
Ein Framework für so benutzerdefinierte Anpassungen wirst du IMHO nicht finden. Dafür gibts ja uns Programmierer
Viel Aufwand ist das definitiv nicht. Siehst ja wie schnell man so was zaubern kann.
Natürlich kann man die Variablen auch in Text- oder CSV-Dateien auslagern und daraus ins Skript zu importieren, da sind der Phantasie keine Grenzen gesetzt
$folderXML = 'D:\xmldateien'
$map = @{
"Var_A"=10
"Var_B"=20
"Var_C"=30
"Var_D"=40
"Var_X"=50
}
gci $folderXML -Filter *.xml | %{
$xml = [xml](gc $_.FullName)
$map.GetEnumerator() | %{
$node = $xml.SelectSingleNode("/Parameters/Parameter/Name[.='$($_.Key)']")
if ($node){
$node.NextSibling.innerText = $_.Value
}
}
$xml.Save($_.FullName)
}
Ein Framework für so benutzerdefinierte Anpassungen wirst du IMHO nicht finden. Dafür gibts ja uns Programmierer
Viel Aufwand ist das definitiv nicht. Siehst ja wie schnell man so was zaubern kann.
Zitat von @Max16hr:
Dein Beispielprogramm verstehe ich jetzt gerade so:
- Man übergibt dem Programm einen Ordner, in dem alle Parameter-Dateien (im selben Format) liegen und legt dann ein Mapping fest, wo einzelnen Variablen auf ihren entsprechenden Wert gesetzt werden.
- Danach gehst du in jede einzelne Datei aus dem Parameter-Ordner. Dort gehst du dann alle Variablen aus dem Mapping durch und veränderst die Werte entsprechend
- Dann wird diese veränderte Datei wieder abgespeichert und in Parameter-Ordner hat man hinterher also Alle Parameter-Dateien in der gewünschten Konfiguration
Ja, korrekt.Dein Beispielprogramm verstehe ich jetzt gerade so:
- Man übergibt dem Programm einen Ordner, in dem alle Parameter-Dateien (im selben Format) liegen und legt dann ein Mapping fest, wo einzelnen Variablen auf ihren entsprechenden Wert gesetzt werden.
- Danach gehst du in jede einzelne Datei aus dem Parameter-Ordner. Dort gehst du dann alle Variablen aus dem Mapping durch und veränderst die Werte entsprechend
- Dann wird diese veränderte Datei wieder abgespeichert und in Parameter-Ordner hat man hinterher also Alle Parameter-Dateien in der gewünschten Konfiguration
Ein wichtiger Punkt wäre nun noch, wie dieses Mapping erstellt wird. Gibt es in Powershell auch eine Möglichkeit, alle verwendeten Parameter aufzulisten?
Ja, du kannst jede deiner Parameterdateien durchlaufen und alle Parameter extrahieren und alle eindeutigen (ohne doppelte Werte) in ein Array schreiben.Ich muss also irgendwie in jede Datei hineinschauen und alle Parameter heraussuchen und auflisten, um sie dann in dem Mapping entsprechend anpassen zu können.
Kein Problem.Mir schwebt da so ein Bild vor: Ich gebe als User dem Programm einen Ordner mit allen Parameter-Dateien. Dann öffnet sich ein Dialog "Bitte geben sie die Werte für folgende Parameter ein:", darunter eine Liste mit allen benötigten Variablen. Dort trage ich dann die Werte für meine entsprechende Konfiguration ein, drücke auf ok, meine Parameter-Dateien werden automatisch angepasst und die Skripte können nun in dieser Konfiguration ausgeführt werden.
Alles machbar, selbst eine GUI kannst du direkt mit PS bauen.# Ordner der Parameterdateien enthält
$folderXML = 'C:\XMLParameterDateien
# Funktion Hole alle eindeutigen Parameter aus allen Parameterdateien
function Get-XMLUniqueParameters(){
$params = @()
gci $folderXML -Filter *.xml | %{
$xml = [xml](gc $_.FullName)
$params += $xml.SelectNodes("/Parameters/Parameter/Name") | select -Expand InnerText
}
return ($params | select -Unique)
}
# Funktion: Setze die Werte in den Parameterdateien
function Set-XMLParameters($parameters){
gci $folderXML -Filter *.xml | %{
$xml = [xml](gc $_.FullName)
$parameters.GetEnumerator() | %{
$node = $xml.SelectSingleNode("/Parameters/Parameter/Name[.='$($_.Key)']")
if ($node){
$node.NextSibling.innerText = $_.Value
}
}
$xml.Save($_.FullName)
}
}
cls
# Leere Map erstellen (enthält später unsere Parameter mit den Werten)
$map = @{}
# Alle Parameter abfragen und den User um Werteingabe auffordern
Get-XMLUniqueParameters | %{$map.$_ = read-host "Geben sie den Wert für Parameter '$_' ein"}
write-host "Schreibe Werte in die Parameterdateien, bitte warten ... " -NoNewline -f Green
# Rufe Funktion zum setzen der Parameter in den Parameterdateien auf
Set-XMLParameters $map
write-host "Fertig!" -f Cyan