none
Dateigröße und Änderungsdatum auslesen

    Frage

  • Hallo Zusammen,

    ich habe hier ein skript und komme leider nicht weiter.

    Er soll mir Dateigröße und Änderungsdatum per email senden.

    Gestartet soll das skript aus einer Bat Datei.

    Ich erhalte eine Email leider ohne Inhalt, wieso?

    @echo off & setlocal
    set "SMTP=IP"
    set "SUBJECT=Dateiinformationen"
    set "FROM=Powershell@%computername%"
    set "TO=skript@domain.de"
    
    
    powershell -Executionpolicy ByPass -Command "$report = gci 'C:\Users\Benutzer\Desktop\1*' -Include '*txt' | select Name,LastWriteTime,@{n='Size';e={'{0:F3} MB' -f ($_.Length / 1MB)}} | ConvertTo-HTML -Fragment | out-string; if($report){Send-MailMessage -To '%TO%' -Subject '%SUBJECT%' -BodyAsHtml -Body $report -SmtpServer '%SMTP%' -From '%FROM%'}else{Send-MailMessage -To '%TO%' -Subject '%SUBJECT%' -Body 'Keine Aktuelle stbox im Ordner' -SmtpServer '%SMTP%' -From '%FROM%'}"

    Vielen Dank im Vorraus

    LG Mike

    Donnerstag, 13. April 2017 15:09

Antworten

  • Warum nur per Bat Datei?

    Wenn Deine Get-ChildItem-Abfrage kein Ergebnis liefert, erhält Dein $Report vom ConvertTo-HTML-Cmdlet trotzdem die "Definition" einer Tabelle.  Also: "<table></table>". Das heißt Dein $Report ist niemals leer. 

    Ich glaube so sollte es funktionieren ... 

    $QueryResult = Get-ChildItem -Path 'D:\osoyk\Downloads\test\Cim\1.4.0.1\*' -Include '*txt'
    If($QueryResult){
        $Report = $QueryResult  | 
            Select-Object -Property Name,LastWriteTime,@{Name='Size';Expression={'{0:F3} MB' -f ($_.Length / 1MB)}} | 
                ConvertTo-HTML -Fragment | 
                    Out-String
    }
    Else{
        $Report ='Keine Aktuelle stbox im Ordner'
    }
    
    $MailMessage = @{ 
              From = "Powershell@$ENV:ComputerName" 
                To = 'skript@domain.de' 
           Subject = 'DateiInformationen'
              Body = $Report
        Smtpserver = 'IP' 
    }
    
    Send-MailMessage @MailMessage

    Ich finde, so ist es auch einfacher zu lesen.  ;-)  

    BTW: Wenn Du das Script per Doppelklick ausführen möchtest, kannst Du auch einen Link/Shortcut/Verknüpfung benutzen. Dann brauchst Du keine Bat-Datei verwenden.


    Grüße - Best regards

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


    Freitag, 14. April 2017 19:10

Alle Antworten

  • Hallo,

    wenn Du nur den Teil in einem PowerShell Fenster ausführst 

    gci 'C:\Users\Benutzer\Desktop\1*' -Include '*txt'

    siehst Du dein erwartetes Ergebnis? 

    Ich gehe davon aus das der -include Parameter nicht so arbeitet wie du dir das vorstellst, sieh dir mal die Hilfe an.

    get-help Get-ChildItem -Parameter Include
    Oder nutze den -Filter Parameter anstelle von -Include.

    Beste Gruesse
    brima


    Donnerstag, 13. April 2017 18:19
  • Warum nur per Bat Datei?

    Wenn Deine Get-ChildItem-Abfrage kein Ergebnis liefert, erhält Dein $Report vom ConvertTo-HTML-Cmdlet trotzdem die "Definition" einer Tabelle.  Also: "<table></table>". Das heißt Dein $Report ist niemals leer. 

    Ich glaube so sollte es funktionieren ... 

    $QueryResult = Get-ChildItem -Path 'D:\osoyk\Downloads\test\Cim\1.4.0.1\*' -Include '*txt'
    If($QueryResult){
        $Report = $QueryResult  | 
            Select-Object -Property Name,LastWriteTime,@{Name='Size';Expression={'{0:F3} MB' -f ($_.Length / 1MB)}} | 
                ConvertTo-HTML -Fragment | 
                    Out-String
    }
    Else{
        $Report ='Keine Aktuelle stbox im Ordner'
    }
    
    $MailMessage = @{ 
              From = "Powershell@$ENV:ComputerName" 
                To = 'skript@domain.de' 
           Subject = 'DateiInformationen'
              Body = $Report
        Smtpserver = 'IP' 
    }
    
    Send-MailMessage @MailMessage

    Ich finde, so ist es auch einfacher zu lesen.  ;-)  

    BTW: Wenn Du das Script per Doppelklick ausführen möchtest, kannst Du auch einen Link/Shortcut/Verknüpfung benutzen. Dann brauchst Du keine Bat-Datei verwenden.


    Grüße - Best regards

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


    Freitag, 14. April 2017 19:10
  • Hallo,

    wenn Du nur den Teil in einem PowerShell Fenster ausführst 

    gci 'C:\Users\Benutzer\Desktop\1*' -Include '*txt'

    siehst Du dein erwartetes Ergebnis? 

    Ich gehe davon aus das der -include Parameter nicht so arbeitet wie du dir das vorstellst, sieh dir mal die Hilfe an.

    get-help Get-ChildItem -Parameter Include
    Oder nutze den -Filter Parameter anstelle von -Include.

    Beste Gruesse
    brima


    

    Hallo,

    yes erwartendes Ergebnis sehe ich.


    Dienstag, 18. April 2017 08:14
  • Warum nur per Bat Datei?

    Wenn Deine Get-ChildItem-Abfrage kein Ergebnis liefert, erhält Dein $Report vom ConvertTo-HTML-Cmdlet trotzdem die "Definition" einer Tabelle.  Also: "<table></table>". Das heißt Dein $Report ist niemals leer. 

    Ich glaube so sollte es funktionieren ... 

    $QueryResult = Get-ChildItem -Path 'D:\osoyk\Downloads\test\Cim\1.4.0.1\*' -Include '*txt'
    If($QueryResult){
        $Report = $QueryResult  | 
            Select-Object -PipelineVariable Name,LastWriteTime,@{Name='Size';Expression={'{0:F3} MB' -f ($_.Length / 1MB)}} | 
                ConvertTo-HTML -Fragment | 
                    Out-String
    }
    Else{
        $Report ='Keine Aktuelle stbox im Ordner'
    }
    
    $MailMessage = @{ 
              From = "Powershell@$ENV:ComputerName" 
                To = 'skript@domain.de' 
           Subject = 'DateiInformationen'
              Body = $Report
        Smtpserver = 'IP' 
    }
    
    Send-MailMessage @MailMessage

    Ich finde, so ist es auch einfacher zu lesen.  ;-)  

    BTW: Wenn Du das Script per Doppelklick ausführen möchtest, kannst Du auch einen Link/Shortcut/Verknüpfung benutzen. Dann brauchst Du keine Bat-Datei verwenden.


    Grüße - Best regards

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

    Vielen Dank für dein Skript,

    sieht sehr vielversprechend aus, leider funkt es bei mir noch nicht ganz.

    Erhalte diese Meldung, wenn ich das skript starte.


    Dienstag, 18. April 2017 08:15
  • Bitte keine Bilder posten. Die sind üblicherweise quasi unlesbar. Die Fehlermeldungen kannst Du einfach als Code formatieren  .... dann bleiben auch Zeilenumbrüche und so erhalten.

    Da hat die Autovervollständigung zugeschlagen und ich hab nicht aufgepasst. Statt -PipelineVariable muss da -Property hin. Oder Du lässt es ganz weg - geht auch. Ich habe es oben im Original korrigiert.

    Du darfst übrigens auch gern selbst ein bissl debuggen, wenn Du eine Fehlermeldung erhältst. Die Fehlermeldung ganz zu lesen hilft meistens schon ein Stück weiter. Und dann einfach ein bissl mit dem Code "spielen". Mal was weglassen, mal was anderes dazupacken und sehen was passiert ....  ;-)


    Grüße - Best regards

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

    Dienstag, 18. April 2017 08:24
  • Bitte keine Bilder posten. Die sind üblicherweise quasi unlesbar. Die Fehlermeldungen kannst Du einfach als Code formatieren  .... dann bleiben auch Zeilenumbrüche und so erhalten.

    Da hat die Autovervollständigung zugeschlagen und ich hab nicht aufgepasst. Statt -PipelineVariable muss da -Property hin. Oder Du lässt es ganz weg - geht auch. Ich habe es oben im Original korrigiert.

    Du darfst übrigens auch gern selbst ein bissl debuggen, wenn Du eine Fehlermeldung erhältst. Die Fehlermeldung ganz zu lesen hilft meistens schon ein Stück weiter. Und dann einfach ein bissl mit dem Code "spielen". Mal was weglassen, mal was anderes dazupacken und sehen was passiert ....  ;-)


    Grüße - Best regards

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

    Vielen Dank für die schnelle Antwort, hat wunderbar funktioniert!!!

    Leider sind das meine ersten Schritte in Bereich Powershell und muss schon sagen WOW mächtig.

    Dienstag, 18. April 2017 10:13
  • ....  sind das meine ersten Schritte in Bereich Powershell und muss schon sagen WOW mächtig.

    Na dann - Willkommen in einer größeren und helleren Welt!  ;-)

    Grüße - Best regards

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

    Dienstag, 18. April 2017 10:32