none
Powershell mehrere Pfade einbinden RRS feed

  • Frage

  • Hallo zusammen,

    leider sind meine Kentnisse zu Powershell fast 0.

    Dieses Skript funktioniert einwandfrei:

    @echo off & setlocal set "SMTP=*****" set "SUBJECT=******" set "FROM=Powershell@%computername%" set "TO=******" powershell -Executionpolicy ByPass -Command "

    $report = (gci '\\192.168.85.70\testordner1\*' -Include '1111.xls','2222.xls','3333.xls' |

    %%{\"Datum für $($_.Name) : $(@{$true='OK';$false='FEHLER'}[$_.LastWriteTime.Date -eq (get-date).Date])\"})

    -join [environment]::Newline; Send-MailMessage -To '%TO%' -Subject '%SUBJECT%' -Body $report -SmtpServer '%SMTP%'

    -From '%FROM%'"

    Jedoch möchte ich nun mehrere Pfade einbinden/prüfen lassen!

    Wie kann ich diese Pfade noch hinzufügen:

    \\192.168.85.70\testordner1\*' -Include '1111.xls','2222.xls','3333.xls'
    \\192.168.85.71\testordner2\*' -Include '1111.xls','2222.xls','3333.xls'
    \\192.168.85.72\testordner3\*' -Include '1111.xls','2222.xls','3333.xls'
    \\192.168.85.73\testordner4\*' -Include '1111.xls','2222.xls','3333.xls'




    • Bearbeitet michi-ffm Dienstag, 17. Januar 2017 15:44
    Dienstag, 17. Januar 2017 15:43

Antworten

  • Könnten Sie mir evtl sagen wie?

    Da ich leider kaum Kenntnisse habe!

    Hast Du es überhaupt einmal versucht?

    $SMTP="*****"
    $SUBJECT="******"
    $FROM="Powershell@"+$env:COMPUTERNAME
    $TO="******"
    
    $paths = @('\\192.168.85.70\testordner1\*','\\192.168.85.70\testordner2\*','\\192.168.85.70\testordner3\*','\\192.168.85.70\testordner4\*')
    
    foreach($path in $paths)
    {
        $report = (gci $path -Include '1111.xls','2222.xls','3333.xls' | %%{\"Datum für $($_.Name) : $(@{$true='OK';$false='FEHLER'}[$_.LastWriteTime.Date -eq (get-date).Date])\"}) -join [environment]::Newline; Send-MailMessage -To $TO -Subject $SUBJECT -Body $report -SmtpServer $SMTP -From $FROM
    }

    Evtl. noch die ExecutionPolicy anpassen:

    https://technet.microsoft.com/de-de/library/ee176961.aspx?f=255&MSPPError=-2147217396



    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)



    Donnerstag, 19. Januar 2017 14:23

Alle Antworten

  • Hallo Michi,

    meinst Du so?

    @echo off & setlocal
    set "SMTP=*****"
    set "SUBJECT=******"
    set "FROM=Powershell@%computername%"
    set "TO=******"
    
    powershell -Executionpolicy ByPass -Command "
    
    $paths = @('\\192.168.85.70\testordner1\*','\\192.168.85.70\testordner2\*','\\192.168.85.70\testordner3\*','\\192.168.85.70\testordner4\*')
    
    foreach($path in $paths)
    {
        $report = (gci $path -Include '1111.xls','2222.xls','3333.xls' | %%{\"Datum für $($_.Name) : $(@{$true='OK';$false='FEHLER'}[$_.LastWriteTime.Date -eq (get-date).Date])\"}) -join [environment]::Newline; Send-MailMessage -To '%TO%' -Subject '%SUBJECT%' -Body $report -SmtpServer '%SMTP%' -From '%FROM%'
    }
    
    "



    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)




    Dienstag, 17. Januar 2017 16:37
  • Hallo Michi,

    meinst Du so?

    @echo off & setlocal
    set "SMTP=*****"
    set "SUBJECT=******"
    set "FROM=Powershell@%computername%"
    set "TO=******"
    
    powershell -Executionpolicy ByPass -Command "
    
    $paths = @('\\192.168.85.70\testordner1\*','\\192.168.85.70\testordner2\*','\\192.168.85.70\testordner3\*','\\192.168.85.70\testordner4\*')
    
    foreach($path in $paths)
    {
        $report = (gci $path -Include '1111.xls','2222.xls','3333.xls' | %%{\"Datum für $($_.Name) : $(@{$true='OK';$false='FEHLER'}[$_.LastWriteTime.Date -eq (get-date).Date])\"}) -join [environment]::Newline; Send-MailMessage -To '%TO%' -Subject '%SUBJECT%' -Body $report -SmtpServer '%SMTP%' -From '%FROM%'
    }
    
    "

    Leider sagt er mir das $paths entweder falsch geschrieben ist oder kann dieses nicht finden, ebenso mit foreach!

    Diesen Code habe ich in eine Batch Datei, vermute das es daran liegt!




    • Bearbeitet michi-ffm Dienstag, 17. Januar 2017 17:21
    Dienstag, 17. Januar 2017 17:17
  • Diesen Code habe ich in eine Batch Datei, vermute das es daran liegt!

    Dann konvertiere den Rest der Befehle, also das setzen der Variablen doch nach PowerShell um und starte das Skript als .ps1


    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)



    Dienstag, 17. Januar 2017 17:41
  • Könnten Sie mir evtl sagen wie?

    Da ich leider kaum Kenntnisse habe!

    • Bearbeitet michi-ffm Mittwoch, 18. Januar 2017 08:24
    Mittwoch, 18. Januar 2017 07:56
  • >starte das Skript als .ps1
    >> Könnten Sie mir evtl sagen wie?
    >> leider sind meine Kentnisse zu Powershell fast 0.

    Michi, auf dem "fast 0" - Niveau ist es schwierig mit Aufgaben zu helfen, die "mindestens 1-2"-Niveau erfordern. ;-)

    Wenn du hier sinnvoll weiterkommen willst, wirst du nicht umhin kommen, dich mal etwas mit den Powershell Grundlagen zu befassen. Diese lassen sich in einem Forum nur sehr schlecht vermitteln. Für die Gundlagen siehe z.B. hier und hier.
     
    Grüße, Denniver

     

    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Donnerstag, 19. Januar 2017 11:33
    Moderator
  • Könnten Sie mir evtl sagen wie?

    Da ich leider kaum Kenntnisse habe!

    Hast Du es überhaupt einmal versucht?

    $SMTP="*****"
    $SUBJECT="******"
    $FROM="Powershell@"+$env:COMPUTERNAME
    $TO="******"
    
    $paths = @('\\192.168.85.70\testordner1\*','\\192.168.85.70\testordner2\*','\\192.168.85.70\testordner3\*','\\192.168.85.70\testordner4\*')
    
    foreach($path in $paths)
    {
        $report = (gci $path -Include '1111.xls','2222.xls','3333.xls' | %%{\"Datum für $($_.Name) : $(@{$true='OK';$false='FEHLER'}[$_.LastWriteTime.Date -eq (get-date).Date])\"}) -join [environment]::Newline; Send-MailMessage -To $TO -Subject $SUBJECT -Body $report -SmtpServer $SMTP -From $FROM
    }

    Evtl. noch die ExecutionPolicy anpassen:

    https://technet.microsoft.com/de-de/library/ee176961.aspx?f=255&MSPPError=-2147217396



    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)



    Donnerstag, 19. Januar 2017 14:23
  • Vielen Dank für die Antworten habe es nun so gelöst:

    @echo off & setlocal
    set "SMTP=*******"
    set "SUBJECT=Mini01-04 Excel"
    set "FROM=Powershell@%computername%"
    set "TO=******"
    powershell -Executionpolicy ByPass -Command "$report = (gci '\\192.168.00.1\excel\*','\\192.168.00.2\excel\*','\\192.168.00.3\excel\*','\\192.168.00.4\excel\*' -Include '18277.xls','19012.xls','19291.xls' | %%{\"Datum fur $($_.Fullname) : $(@{$true='OK';$false='FEHLER'}[$_.LastWriteTime.Date -eq (get-date).Date])`n\"}) -join [environment]::Newline; Send-MailMessage -To '%TO%' -Subject '%SUBJECT%' -Body $report -SmtpServer '%SMTP%' -From '%FROM%'"
    

    Besteht die Möglichkeit, den output in der Mail farbig zu gestalten?

    D.h. Wenn Fehler dann Rot anzeigen und bei Ok grün anzuzeigen, ist das möglich?

    Ausgabe :

    Datum fur \\192.168.00.1\excel\18277.xls : OK

    Datum fur \\192.168.00.1\excel\19012.xls : OK

    Datum fur \\192.168.00.1\excel\19291.xls : OK

    Datum fur \\192.168.00.2\excel\18277.xls : OK

    Datum fur \\192.168.00.2\excel\19012.xls : OK

    Datum fur \\192.168.00.2\excel\19291.xls : OK

    Datum fur \\192.168.00.3\excel\18277.xls : OK

    Datum fur \\192.168.00.3\excel\19012.xls : OK

    Datum fur \\192.168.00.3\excel\19291.xls : OK

    Datum fur \\192.168.00.4\excel\18277.xls : OK

    Datum fur \\192.168.00.4\excel\19012.xls : OK

    Datum fur \\192.168.00.4\excel\19291.xls : OK

    Freitag, 20. Januar 2017 14:49
  • Besteht die Möglichkeit, den output in der Mail farbig zu gestalten?

    Hi,

    ja, das geht Send-MailMessage kennt anstelle des Parameters -Body auch -BodyAsHtml. Wenn du denn nutzt kannst Du deine Information einfärben, formatieren usw. wenn Du eben entsprechenden HTML Code einfügst.

    Kleines Beispiel für den Parameter

    -BodyAsHtml "<font size='8' color='red'><b>Test</b>"

    weil -BodyAsHtml den body nicht ersetzt sondern lediglich ein Switch Parameter sst muesste man es eingenlich so schreiben.

    -BodyAsHtml -Body "<font size='8' color='red'><b>Test</b>"

    Beste Gruesse
    brima




    • Bearbeitet brima Freitag, 20. Januar 2017 16:00
    Freitag, 20. Januar 2017 15:27
  • Hallo,

    ich habe mal ein kleines Beispiel für den Parameter oben im meinem Post hinzugefügt, der da Wort Test in rot und in größerer Schrift ausgibt.

    Beste Gruesse
    brima

    Freitag, 20. Januar 2017 15:45
  • leider pasiert auch dann nicht!

    Hier die Code Zeile

    Send-MailMessage -To '%TO%' -Subject '%SUBJECT%' -BodyAsHtml -Body "<font size='8' color='red'><b>Test</b>" $report -SmtpServer '%SMTP%' -From '%FROM%'"
    

    Freitag, 20. Januar 2017 16:06
  • Hi,

    das liegt hier dran ... </b>" $report  ... das musst du wenn schon so schreiben ... </b> $report " ... aber so wird dein Report nicht farbig wie du dir das vorstellst, sondern du muss dann eigentlich den Inahlt von $report mit HTML "verkleiden". Such mal über Google nach send-mailmessage und bodyashtml da solltest du schon Beiträge mit Beispielen finden wie man das so macht. 

    Click

    • Bearbeitet brima Freitag, 20. Januar 2017 16:17
    Freitag, 20. Januar 2017 16:13