rippchen
Goto Top

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

Content-Key: 319619

Url: https://administrator.de/contentid/319619

Printed on: April 24, 2024 at 22:04 o'clock

Mitglied: 131339
131339 Oct 31, 2016 at 08:46:07 (UTC)
Goto Top
Nimm einen Workflow zur parallelen Verarbeitung:
https://blogs.technet.microsoft.com/heyscriptingguy/2012/12/26/powershel ...

Schluckauf
Member: Rippchen
Rippchen Oct 31, 2016 at 10:27:22 (UTC)
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
Mitglied: 131339
131339 Oct 31, 2016 updated at 12:06:40 (UTC)
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 ...