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

Geschrieben

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
 

Geschrieben (bearbeitet)

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
Geschrieben (bearbeitet)

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
Geschrieben

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

  • 1 Monat später...
  • 3 Wochen später...
Geschrieben (bearbeitet)

So in der Art:

$ADWGColl = $AD.WorkerGroups.split(";")
Foreach ($ADWG in ADWGColl) ...

...geht bestimmt auch ohne Umweg über ne extra Variable, aber ich find, lesbarer Code geht immer noch vor Zeilenminimierung ;-)

bearbeitet von Cybquest
  • Beste Lösung
Geschrieben (bearbeitet)

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
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...