Jump to content

PowerShell - Suchen und Ersetzen von bestimmten Properties aus mehreren Datenquellen


Direkt zur Lösung Gelöst von pampersrocker,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

vielleicht könnt ihr mir weiterhelfen. Ich glaube, ich habe mir gerade einen Knoten in den Kopf gedacht und bekomme ihn aktuell nicht entfernt.

Folgendes Szenario:
Ich habe zwei CSV-Dateien, die ich jeweils in eine Variable lade. ($ApplicationData & $WorkerGroupData).

In $ApplicationData habe ich unter anderem die Properties "Servers" und "WorkerGroups".
In $WorkerGroupData habe ich unter anderem die Properties "WorkerGroupName" und "ServerName".

Ich möchte jetzt für jeden Eintrag in $ApplicationData prüfen, ob "Servers" leer ist, wenn "Servers" leer ist, soll überprüft werden, ob "WorkerGroups" auch leer ist. Ist "WorkerGroups" nicht leer, soll der Inhalt aus "WorkerGroups" mit dem Inhalt aus $WorkerGroupData.WorkerGroupName" verglichen werden. Wenn das identisch ist, sollen alle gelieferten "$WorkerGroupData.ServerName" in "$ApplicationData.Servers" eingetragen möglich. Mehrere "Servers" pro "$ApplicationData"-Datensatz sind möglich.

Habt ihr einen Lösungsansatz für mich?

Beste Grüße,

 

pampersrocker
 

Link zu diesem Kommentar

wenn da mehrere Servers pro Datensatz drin stehen können... wie sind die da in der CSV eingetragen? Mit nem Trennzeichen (Leerzeichen o.ä.) in der Spalte "Servers"?

 

Ansonsten mal ein Ansatz in "Pseudocode":

For-Each AD in AppData {

  tmpServers=""

  If AD.Servers -eq null {

    If AD.Workersgroup -neq null {

      For-Each WD in WorkerData {

        If AD.WorkerGroup = WD.WorkerGroup then tmpServers = tmpServers + WD.Server }

      AD.Servers = tmpServers }}

}

bearbeitet von Cybquest
Link zu diesem Kommentar

Hi Cybquest,

 

vielen Dank für deine Antwort. Ich habe das mal in Code umgesetzt. Jetzt werden die WorkerGroups anstatt die ServerName in das Feld Servers eingetragen.. Hier mein Code:

foreach ($AD in $AppData) 
{
    $tmpServers = $null
    if ([string]::IsNullOrEmpty($AD.Servers)) 
    {
        if (![string]::IsNullOrEmpty($AD.WorkerGroups)) 
        {
            foreach ($WD in $WorkerData)
            {
                if ($AD.Servers -eq $WD.WorkerGroups)
                {
                $tmpServers = $tmpServers + $WD.ServerName
                }
            }
            $AD.Servers = $tmpServers
        }  
    }
}

Hast du eine Idee? :-)

 

Nachtrag: Achso - um auf die Frage zu antworten. Die Mehrfacheinträge sind per Semikolon getrennt.

bearbeitet von pampersrocker
Link zu diesem Kommentar

Müsste da...

                if ($AD.Servers -eq $WD.WorkerGroups)

...nicht...

                if ($AD.WorkerGroups -eq $WD.WorkerGroups)

...stehen?

 

Und wenn die Mehrfacheinträge per Semikolon getrennt sind, müsste es doch z.B.

                $tmpServers = $tmpServers + $WD.ServerName + ';'

...heissen

Link zu diesem Kommentar
  • 1 Monat später...
  • 3 Wochen später...
  • Beste Lösung

Ja, das ist er auch, aber ich bekomme die Foreach-Schleife nicht in den Pseudocode eingebaut.. :schreck:

 

 

.. hab die Lösung gefunden:

foreach ($AD in $AppData) 
{
    $tmpServers = $null
    if ([string]::IsNullOrEmpty($AD.Servers)) 
    {
        if (![string]::IsNullOrEmpty($AD.WorkerGroups)) 
        {
            foreach ($WD in $WorkerData)
            {
                $WorkerGroupsCollection = $AD.WorkerGroups.split(";").Trim()
                foreach ($wgc in $WorkerGroupsCollection) 
                {
                   if ($wgc -eq $WD.WorkerGroups)
                   {
                   $tmpServers = $tmpServers + $WD.ServerName
                   }
                }
            }
            $AD.Servers = $tmpServers
        }  
    }
}
bearbeitet von pampersrocker
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...