none
Outlook - Wenn E-Mail Anhang gespeichert, die entsprechende Mail verschieben RRS feed

  • Frage

  • Hallo,

    ich möchte mittels PowerShell alle Anhänge von E-Mails aus einem bestimmten vordefinierten öffentlichen Ordner speichern.

    Dies funktioniert mit folgendem Skript auch:

    $object = New-Object -comobject outlook.application
    $namespace = $object.GetNamespace("MAPI")
    
    $publicFolders  = $objNamespace.Folders | Where { $_.name.StartsWith("Öffentliche Ordner") } | Select -f 1
    $AllPublicFolders = $publicFolders.Folders | Where { $_.name -eq "Alle öffentlichen Ordner" } | Select -f 1
    $folder = $AllPublicFolders.Folders | Where { $_.name -eq "elektrotipp" } | Select -f 1
    
    $globalpath = "C:\Test"
    
    $folder.Items | foreach {
    
    $date  = $_.ReceivedTime  
    $DateStr = $Date.ToString("yyyyMMddssmmfff")
    
        $_.attachments | foreach {
    
            Write-Host $dateStr
    	Write-Host $_.filename 
            $attachName =  $DateStr + $_.filename
    
            If ($attachName.Contains("TIF")) {
    	$_.saveasfile((Join-Path $globalpath $attachName))
    
      }
      } 
      }

    Problem: Diese Schleife wird komplett bei jedem Start des Skriptes durchlaufen. In Zukunft soll Powershell nach dem speichern eines Anhangs, die E-Mail in einen anderen öffentlichen Ordner verschieben.

    Ist dies möglich?

    Vielen Dank für Ihre Mühen.


    Montag, 4. Mai 2015 15:21

Antworten

  •  Ok, ich kann es leider nicht testen, aber es sieht mir ja so aus, als seien die $folder.items die du da durchsuchst, direkt die Mailobjekte. Mailobjekte haben eine Methode namens move(). Als Parameter benötigt diese Methode nur einen Zielordner.

    Dieser Zielordner muß offenbar ein Ordnerobjekt sein, d.h. du musst ihn genauso bestimmen wie $folder zu beginn deines Scriptes.
    Du solltest außerdem auf diese Mini-Pipelines mit $y | foreach{} verzichten und statt dessen foreach ($x in $y){} benutzen, das ist erheblich schneller.

     foreach ( $mail in $folder.Items ) {
    
    	$date  = $mail.ReceivedTime  
    	$DateStr = $Date.ToString("yyyyMMddssmmfff")
    
    	foreach ($att in $mail.attachments) {
    
    		Write-Host $dateStr
    		Write-Host $att.filename 
    		$attachName =  $DateStr + $att.filename
    
    		If ($attachName.Contains("TIF")) {
    		   $att.saveasfile((Join-Path $globalpath $attachName))
    		}
    	}
    	# verschiebe mail
    	$mail.move($zielOrdner)
    }
     
     Grüße, Denniver



    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher 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.


    Freitag, 8. Mai 2015 11:53
    Moderator