pat.bat
Goto Top

PowerShell - Zahl aus Textdatei pro Monat summieren

Hallo zusammen,

da wir täglich eine kleine Textdatei generieren, wie viele Dokumente am Vortag gedruckt wurden, möchten wir nun ein Diagramm erstellen lassen, was uns dann grafisch etwa per Jahr, Monat oder Woche die Zahlen anzeigt.

Dazu bin ich nun an dem Skript dran, was sich die Textdateien zieht (erstmal nur pro Monat).
Ich gehe mit dem Skript also in den Ordner mit dem Jahr und gehe dort die Monatsordner durch. in jedem Monatsordner befindet sich dann noch ein Ordner mit dem Tagesdatum zb. 15-10-2019. Darin befindet sich dann die Textdatei, wo ich per Get-Content -First 1 die erste Zeile auslese, wo sich die Anzahl der am Tag gedruckten Dokumente befindet.

# get summery of files per month and year

param (
    $Year = 2019 # for testing/debug
)

$Path = "\\vdm-11\LUP-Daten\FD_50_Bank\System_PROJEKTE\Druckerstraße\$Year"  
$SumPerMonth = @()
 

For ( $Month = 1; $Month -le 12; $Month++)
{
    Write-Host "$Path\$Year-$Month"  
    If (Test-Path "$Path\$Year-$Month")  
    {
        $Files = Get-ChildItem -Path "$Path\$Year-$Month" -Recurse -Force -File  
        Foreach ($File in $Files)
        {
            $SumDay = Get-Content "$File" -First 1  
            $SumDay.Substring(19,3)
            $SumPerMonth[$Month] += $SumDay
        }
        Write-Host $Month : $SumPerMonth[$Month] 
    }
}

2 Probleme habe ich derzeit.

1. hat er zwar den kompletten Pfad in der Variable $File, zieht sich aber immer den Userpfad/Druckliste.txt
Get-Content : Der Pfad "C:\Users\pvoelz\Druckliste.txt" kann nicht gefunden werden, da er nicht vorhanden ist.  

2. wenn ich das Skript so abändere:
        $Files = Get-ChildItem -Path "$Path\$Year-$Month" -Recurse -Force  
        Foreach ($File in $Files)
        {
            $SumDay = Get-Content "$Path\$Year-$Month\$File\Druckliste.txt" -First 1  
dann zieht er sich die Anzahl aus den Textdateien, aber sagt:
Der Index war außerhalb des Arraybereichs.

letzendlich soll das Skript dann einen Rückgabewert an das aufrufende Skript geben, das Array $SumPerMonth (wozu ich noch nicht gekommen bin).

Content-ID: 526140

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

Ausgedruckt am: 05.11.2024 um 17:11 Uhr

Kraemer
Kraemer 16.12.2019 um 11:20:26 Uhr
Goto Top
Zitat von @Pat.bat:
1. hat er zwar den kompletten Pfad in der Variable $File, zieht sich aber immer den Userpfad/Druckliste.txt
$File repräsentiert ein Objekt, welches mehrere Eigenschaften hat. Du musst schon die für dich passende wählen

$File.FullName
Pat.bat
Pat.bat 16.12.2019 um 11:34:27 Uhr
Goto Top
Ah richtig, da hab ich nicht mehr dran gedacht. So ist das erste schon mal geklärt.

Aber das Array füllt er mir trotzdem noch nicht.

Ich verstehe nur nicht warum er das nicht zuordnen kann. Oder muss ich erst die Daten im Array deklarieren, bevor ich sie füllen kann?

Das Array müsste am Ende dann ja so aussehen in etwa:

$SumPerMonth = @( 1 = 1200; 2 = 5600; ... 12 = 3200)
142232
142232 16.12.2019 aktualisiert um 15:42:00 Uhr
Goto Top
param (
    $Year = 2019
)

$Path = "\\vdm-11\LUP-Daten\FD_50_Bank\System_PROJEKTE\Druckerstraße\$Year"  

gci $path -Directory | %{
    $sum = (gci $_.FullName -File -Recurse -Force | %{[int]((gc $_.Fullname -First 1).Substring(19,3))} | measure -Sum).Sum
    [pscustomobject]@{Month=$_.Name.split("-")[1];Summe=$sum}  
}