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-Key: 526140

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

Printed on: April 27, 2024 at 02:04 o'clock

Member: Kraemer
Kraemer Dec 16, 2019 at 10:20:26 (UTC)
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
Member: Pat.bat
Pat.bat Dec 16, 2019 at 10:34:27 (UTC)
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)
Mitglied: 142232
142232 Dec 16, 2019 updated at 14:42:00 (UTC)
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}  
}