none
Dateien Pfad und Dateigröße in MB, in einer Ausgabedatei?

    Frage

  • Heyo liebe Community,

    ich habe eine kleine Frage.

    Ich bin heute das 1. Mal in Kontakt mit Power-Shell getreten. Ich möchte gerne ein Script schreiben, bei dem ein
    Ordner komplett nach zwei Dateiendungen/typen gesucht wird. Dieses Ergebnis möchte ich gerne in einer Textdatei ausgeben.

    Mein Code funktioniert soweit 1A! Jedoch fehlt mir hinter der erstellten Datei leider die Größe in MB.. :(

    Beispiel in der jetzigen Ergebnis-Datei:

    C:\A\B\C\D\Test.txt
    C:\1\2\3\4\Spiel.exe

    Soweit perfekt, jedoch würde ich gerne es wie folgt wollen:

    C:\A\B\C\D\Test.txt - 235MB
    C:\1\2\3\4\Spiel.exe - 4252MB

    Wäre dies umzusetzen? Mein Code folgt (habe null Erfahrung mit programmieren, jedoch macht mir Power-Shell echt Spaß!)

    #Es wird eine neue PowerShell geöffnet, damit man Administrator-Rechte für jeden Ordner hat
    If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
    {
        Write-Host "Running elevated..."
        $arguments = "& '" + $myinvocation.mycommand.definition + "'"
        Start-Process powershell -Verb runAs -ArgumentList $arguments
        Break
    }
    
    #Ergebnis Datei (Pfad wird angegeben und die Datei wird erstellt)
    $Ergebnis = "C:\Tmp\Script Outlook-Dateien\Gefundene_Dateien\Gefundene_Dateien.txt"
    $Erstelle_Ergebnis_Datei = out-file $Ergebnis
    
    #Text-Eintrag in die Ergebnis Datei
    "Alle gefundenen Dateien werden hier nun aufgelistet:" | Add-Content $Ergebnis
    
    #Suche nach einer .txt Datei
    $Suche_der_TXT_Dateien = Get-ChildItem C:\*.txt -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Extension -eq ".txt"}
    
    #Absatz
    "
    " | Add-Content $Ergebnis
    
    #Ergebnise der .txt Datei-Suche wird in die Ergebnis Datei geschrieben
    $Suche_der_TXT_Dateien | Add-Content $Ergebnis
    
    #Absatz
    "
    " | Add-Content $Ergebnis
    
    #Trennung zwischen .txt und .pdf Dateien
    "--------------------------------------------" | Add-Content $Ergebnis
    
    #Absatz
    "
    " | Add-Content $Ergebnis
    
    #Suche nach einer .pdf Datei
    $Suche_der_PDF_Dateien = Get-ChildItem C:\*.pdf -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Extension -eq ".pdf"}
    
    #Ergebnise der .pdf Datei-Suche wird in die Ergebnis Datei geschriben
    $Suche_der_PDF_Dateien | Add-Content $Ergebnis
    
    #Absatz
    "
    " | Add-Content $Ergebnis
    
    #Text-Eintrag in die Ergebnis Datei
    "Script V1.0 von Philipp" | Add-Content $Ergebnis
    
    #Der Befehl gibt an, dass auf dem Rechner keine Scripte mehr erfolgen dürfen
    Set-ExecutionPolicy restricted -force

    Grüße Philipp!


    Samstag, 30. Juni 2018 19:22

Antworten

  • Hmmm ... also erstmal willkommen im deutschen Powershell Forum. Für die Zukunft bitte: Powershell. Ohne Bindestrich!  ;-)

    Ich würde Dir empfehlen, Dir als erstes die Grundlagen von Powershell auf strukturierte Weise anzueignen.  Das funktioniert nicht wirklich mit Googlen und ein paar Schnipsel zusammenkopieren - so entgeht Dir das Beste. Das geht aber völlig kostenlos und einigermaßen unterhaltsam mit einem guten Videokurs der Microsoft Virtual Academy - Getting Started with Powershell.

    Dein Code ist etwas umständlich und nutzt die vielen Goodies, die Dir die Powershell bietet nicht wirklich aus. Ich würde es eher so anfangen:

    #Requires -RunAsAdministrator
    
    Get-ChildItem -Path 'c:\*' -Recurse -Include '*.txt','*.pdf' |
            Select-Object -Property FullName,@{Name='MB';Expression={[MATH]::Round($_.Length /1MB,2)}},Extension -OutVariable Result
    
    $Result | 
        Sort-Object -Property Extension |
            Select-Object -Property FullName,MB |
                Export-CSV -Path 'C:\Tmp\Script Outlook-Dateien\Gefundene_Dateien\Gefundene_Dateien.csv' -Delimiter ';' -NoTypeInformation
    

    Als Ausgabeformat habe ich CSV gewählt, weil das meiner Meinung nach für strukturierte Daten am meisten Sinn macht. Du kannst das Ganze natürlich auch einfach in eine Test-Datei ausgeben. Das ginge dann mit:

    $Result | 
        Sort-Object -Property Extension |
            Select-Object -Property FullName,MB |
                Out-File -FilePath 'C:\Tmp\Script Outlook-Dateien\Gefundene_Dateien\Gefundene_Dateien.txt'
    Es ist auch gar nicht nötig, in einem Powershellscript so viel zu kommentieren, was sowieso offensichtlich ist.  Jeder der Powershell kennt, weiß was Get-ChildItem macht oder Add-Content.


    Na denn erstmal viel Spaß und viel Erfolg.


    Best regards,

    (79,108,97,102|%{[char]$_})-join''

    Samstag, 30. Juni 2018 23:04