Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
Thorus

Anhänge aus eMails extrahieren

Empfohlene Beiträge

Hallo zusammen,

 

ich stehe vor dem Problem, dass ich aus einem Exchange-Postfach Anhänge exportieren und in einem definierten Ordner ablegen muss. Bei der Ablage müssen die Anhänge auch noch umbenannt werden.

Nach einigen Versuchen habe ich ein funktionierendes Script zustande gebracht, aber nun habe ich das Problem, dass das Script verhältnismäßig lange läuft (z.B. bei einer Mail mit 6 Anhängen fast 10 Minuten) und während der Laufzeit den kompletten virtuellen Server CPU-technisch auslastet.

 

Könnt ihr da vielleicht mal rüberlesen, ob da grobe Fehler drin sind?

Hat jemand noch einen anderen Ansatz als mit dem entsprechenden Benutzer über Outlook zu arbeiten?

 

Vielen Dank

Thorus

##########################################################
$object = New-Object -comobject outlook.application
$namespace = $object.GetNamespace("MAPI")
$folder = $namespace.GetDefaultFolder(6)
$dir = "C:\Technik\extrahiert"
$dir_ready = "C:\Technik"
##########################################################
#Check if folder exist
if( -not (Test-Path $dir) )
{
   New-Item $dir -type directory
}
#Set timestamp to logfile
Get-Date | Out-File -FilePath "C:\Logfiles\extract.log" -append
#Check every mail for attachments and copy them to $dir. Write all filenames to logfile and move all mails to trash.
$folder.Items | foreach {$SendName = $_.SenderName
    $_.attachments | foreach {
		$attachName = $_.filename
		If ($attachName.Contains("jpg")) {
        (get-content "C:\Logfiles\extract.log") | where {$_ -ne ""} | out-file "C:\Logfiles\extract.log"
        #Create entry in logfile
		Write-Output $_.filename | Out-File -FilePath "C:\Logfiles\extract.log" -append
		#Write File to filesystem
		$_.saveasfile((Join-Path $dir $attachName))
				
   }
   }
#Rename Files
   $files = dir $dir\*.jpg

foreach ($item in $files)
{
	#Split filename on blank
	$fid = $item.Name.split(" ")

	#fill fid2 up to 7 digits
	#count actual digits
	$mo = $fid[2] | Measure-Object -Character
	$count = $mo.Characters

	while ($count -lt 7) 
	{
		$fid[2] = "0" + $fid[2]
		$mo = $fid[2] | Measure-Object -Character
		$count = $mo.Characters
	}

	#Change format of items LastWriteTime
	$time = $item.LastWriteTime
	$time = $time.ToString("_yyyyMMdd_HHmmss_")

	#Build new filename
	$newname = $fid[0] + $time + $fid[2]

	#Rename item 
	$item | Rename-Item -NewName $newname
}

   $files = dir $dir\*.jpg	
   Move-Item $files $dir_ready
   $_.Delete()
}

#Stop all processes of user konfigseiten
$processes = Get-WmiObject win32_process | Select-Object ProcessID,Name,@{n=’Owner‘;e={$_.GetOwner().User}}
foreach ($p in $processes)
{
    if ($p.Owner -eq „konfigseiten“)
    {
        if ($p.Name -eq „outlook.exe“)
        {
            stop-process -id $p.ProcessID -Force

        }
    }    
}

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Moin,

nur so als Hinweis für einen anderen Ansatz.

Ein Tool wie Exchange Rules Pro (https://www.codetwo.de/exchange-rules-pro/) macht so etwas nebenbei mit. Ganz ohne Programmieraufwand und einen (fehleranfälligen) Outlook-Client für so etwas missbrauchen zu müssen!

 

Gruß

Dirk

bearbeitet von monstermania

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Dies kannst du über eine Regel steuern (Ausführen von Skripten).

 

Probiere es mal hiermit:

Public Sub saveAttachtoDisk (itm As Outlook.MailItem) 
    Dim objAtt As Outlook.Attachment 
    Dim saveFolder As String Dim dateFormat
    dateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd H-mm")
    saveFolder = "C:\Temp"
    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
    Next
End Sub

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×