rippchen

Powershell Skript optimieren, Performance Optimierung, Multithreading, CSV Stapelverarbeitung, CSV Filter

Hallo,

ich nutze folgendes Skript:

Set-ExecutionPolicy RemoteSigned -Force
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

$folder = 'C:\Daten Bearbeitung\Import'  
$out = 'C:\Daten Bearbeitung\Export\Gesamte Daten.csv'  

gci $folder -Filter *.csv -recurse | %{
    $raw = ((gc $_.FullName) | select -Skip 7)
    $csv = $raw[0..($raw.GetUpperBound(0)-1)]| ConvertFrom-CSV -Delimiter ";" -Header "Car","ID","TimeStamp","Note","PublicationTimeStamp","ModificationTimeStamp"  
    $csv | %{$_."TimeStamp" = get-date $_."Timestamp" -Format 'dd-MM-yyyy HH:mm:ss'}   
    $csv | %{$_."PublicationTimeStamp" = get-date $_."PublicationTimeStamp" -Format 'dd-MM-yyyy HH:mm:ss'}   
    $csv | %{$_."ModificationTimeStamp" = get-date $_."ModificationTimeStamp" -Format 'dd-MM-yyyy HH:mm:ss'}   
    $csv | export-csv $out -Append -Delimiter ";" -Notype -Encoding UTF8  

}

# TEIL 2---Filtern (bereinigen) der Daten--------------------------------------------------------------------------------

gci 'C:\Daten Bearbeitung\Export\Gesamte DatenGesamte Daten.csv'| %{  
    gc $_.FullName | select -Skip 1| ConvertFrom-CSV -Delimiter ";" -Header "Car","ID","TimeStamp","Note","PublicationTimeStamp","ModificationTimeStamp" | group -property 'ID','TimeStamp' | %{$_.Group | sort {get-date $_.'ModificationTimeStamp'} -Descending | select -First 1} | Sort "ID",'Timestamp' -descending | export-csv 'C:\Daten Bearbeitung\Export\bereinigte Daten\Gesamte Daten.csv' -Append -Delimiter ";" -Notype -Encoding UTF8  
[System.GC]::Collect()
}


# Zeile 1 bis einschließlich Hier ausführen


Ich nutze es zur Stapelverarbeitung von CSV Dateien (weit über 100000 Dateien) , die immer gleich aufgebaut sind. Mein Problem ist, dass die Bearbeitung meist mehr als 24 h dauert.

Mein Prozessor ist dabei nur zu 13 % ausgelastet und der Arbeitsspeicher läuft nur langsam voll (erreicht irgendwann jedoch 50 GB)

Mein Rechner hat:

Intel 2600k I7 8 Threads
32 GB Arbeitsspeicher (exkl. Auslagerungsdatei)
Windows 10 Enterprise

Ich bin darauf gestoßen, dass man PS-Skripte optimieren kann. Es fehlt mir jedoch das tiefgreifende und vernetze Verständnis für derartige Optimierungen.

Es wäre nett, wenn mir jemand helfen könnte und dazuschreibt, was die Veränderung bewirkt, damit ich etwas dazulerne.

Vielen Dank und einen schönen Feiertag


VG
Rippchen
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 319619

Url: https://administrator.de/forum/powershell-skript-optimieren-performance-optimierung-multithreading-csv-stapelverarbeitung-csv-filter-319619.html

Ausgedruckt am: 03.06.2025 um 09:06 Uhr

131339
131339 31.10.2016 um 09:46:07 Uhr
Goto Top
Nimm einen Workflow zur parallelen Verarbeitung:
https://blogs.technet.microsoft.com/heyscriptingguy/2012/12/26/powershel ...

Schluckauf
Rippchen
Rippchen 31.10.2016 um 11:27:22 Uhr
Goto Top
Hallo Danke für die Antwort,

ich habe
workflow TEST  {

$folder = 'C:\Daten Bearbeitung\Import'  
$out = 'C:\Daten Bearbeitung\Export\Gesamte Daten.csv'  

gci $folder -Filter *.csv -recurse | %{
    $raw = ((gc $_.FullName) | select -Skip 7)
    $csv = $raw[0..($raw.GetUpperBound(0)-1)]| ConvertFrom-CSV -Delimiter ";" -Header "Car","ID","TimeStamp","Note","PublicationTimeStamp","ModificationTimeStamp"  
   
 parallel {  
   
    $csv | %{$_."TimeStamp" = get-date $_."Timestamp" -Format 'dd-MM-yyyy HH:mm:ss'}   
    $csv | %{$_."PublicationTimeStamp" = get-date $_."PublicationTimeStamp" -Format 'dd-MM-yyyy HH:mm:ss'}   
    $csv | %{$_."ModificationTimeStamp" = get-date $_."ModificationTimeStamp" -Format 'dd-MM-yyyy HH:mm:ss'}   
    
    }
$csv | export-csv $out -Append -Delimiter ";" -Notype -Encoding UTF8      

}
}
# TEIL 2---Filtern (bereinigen) der Daten--------------------------------------------------------------------------------

gci 'C:\Daten Bearbeitung\Export\Gesamte DatenGesamte Daten.csv'| %{  
    gc $_.FullName | select -Skip 1| ConvertFrom-CSV -Delimiter ";" -Header "Car","ID","TimeStamp","Note","PublicationTimeStamp","ModificationTimeStamp" | group -property 'ID','TimeStamp' | %{$_.Group | sort {get-date $_.'ModificationTimeStamp'} -Descending | select -First 1} | Sort "ID",'Timestamp' -descending | export-csv 'C:\Daten Bearbeitung\Export\bereinigte Daten\Gesamte Daten.csv' -Append -Delimiter ";" -Notype -Encoding UTF8  
[System.GC]::Collect()
}


# Zeile 1 bis einschließlich Hier ausführen


getestet. Jedoch gibt mir PS keine Fehlermeldung raus, noch gibt es irgendwelche Daten raus.

Mein Skript habe ich auch nur durch Hilfe dieses Forums zusammenbauen können.

Meine Grundlagen sind wirklich gering.

VG
131339
131339 31.10.2016 aktualisiert um 13:06:40 Uhr
Goto Top
Mein Skript habe ich auch nur durch Hilfe dieses Forums zusammenbauen können.
Sicher das du den richtigen Job gewählt hast?
Meine Grundlagen sind wirklich gering.
sieht man.

Artikel wurde nicht vollständig gelesen ...