Benutzer mit den meisten Antworten
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
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''- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Samstag, 15. April 2017 10:46
- Bearbeitet BOfH-666 Dienstag, 18. April 2017 08:20
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 20. April 2017 16:00
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- Bearbeitet brima Donnerstag, 13. April 2017 18:26
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Samstag, 15. April 2017 10:46
- Nicht als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 20. April 2017 16:00
-
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''- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Samstag, 15. April 2017 10:46
- Bearbeitet BOfH-666 Dienstag, 18. April 2017 08:20
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 20. April 2017 16:00
-
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.
-
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.
-
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'' -
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.