2016-04-14 6 views
1

Ich nehme einen PowerShell-Kurs für Anfänger, und der Lehrer ist völlig nutzlos, wenn es darum geht, um Hilfe zu bitten. Die Aufgabe, die ich versuche, ist: Durchsuchen Sie meinen Computer nach Dateien mit Endungen .doc, .docx, .xls oder .xlsx. Geben Sie die Dateinamen und Größen (in Gruppen nach Dateierweiterung) in eine Textdatei mit dem Namen "File_Summary.txt" aus. Die Ausgabe sollte auch mit einer Gesamtzahl der Dateien und der Gesamtdateigröße für jede Dateierweiterung abschließen. Der Code, den ich bisher erstellt habe ist:Powershell-Anzahl Dateierweiterungen mit Gesamtdateigröße für jede Erweiterung

Der Code läuft (obwohl ich sicher bin, es ist schrecklich Codierung); Ich kann jedoch nicht herausfinden, wie die gesamte Dateigröße für jede Erweiterung zusammengefügt wird. Ich habe die Gesamtzahl der Dateien für jede Erweiterung, aber nur nicht die Gesamtgröße. Danke für jede Hilfe, die mir jemand geben kann!

+0

Ich glaube nicht, dass Sie eine saubere Option ohne eine Schleife haben; Am saubersten kann ich mir vorstellen, 'Group-Object -Property Extension' zu verwenden und das in einer Variablen zu speichern, dann benutze' $ store | ForEach {$ _. Name; $ _. Gruppe | Measure-Object -Sum -Property Länge | Wählen Sie -ExpandProperty Sum} und sehen Sie, was das bedeutet, und arbeiten Sie daran, um es an die Datei anzuhängen. (Ich schlage auch vor, dass Sie die Ergebnisse des grundlegenden Get-ChildItem-Aufrufs vom ersten Mal speichern, bevor Sie etwas tun, dann können Sie die Ergebnisse wiederverwenden und müssen nicht darauf warten, dass sie erneut nach der Anzahl der Dateien sucht). – TessellatingHeckler

Antwort

1

Sie möchten Measure-Object als TessellatingHeckler vorgeschlagen. Dies wird tun, was Sie versuchen zu erreichen:

$path = ".\" 
$destination = "C:\Users\StayPositibve\Desktop\pleasework1.txt" 

$results = Get-ChildItem .\* -Recurse | where {$_.extension -in ".doc",".docx",".xls",".xlsx"} | Select-Object Name, Extension, @{Name="Kbytes";Expression={ "{0:N0}" -f ($_.Length/1Kb) }} 
$results | Sort-Object -Property extension | Out-File $destination 
$results|group extension|select Count,Name,@{l='Total KB';e={$_.Group | Measure-Object -Property kbytes -Sum|select -expand sum}}| Out-File $destination -Append 

ich $results verwenden wieder, und Gruppe wie Sie haben, aber dann verwende ich Select eine neue Eigenschaft hinzufügen, wo ich die Gesamtgröße der einzelnen Gruppierung erhalten mit Measure-Object geleitet an Select -Expand Sum.

+0

Dank TheMadTechnician und TessellatingHeckler für Ihre Hilfe. Wenn ich mir Ihren Code anschaue, kann ich sehen, wo ich zwei Variablen erstellt habe, die denselben Prozess ausgeführt haben, anstatt nur $ results zu verwenden. Ich bin neu darin, also bin ich froh, dass ich langsam dorthin komme, lol. Danke noch einmal! –