Zum Inhalt wechseln


Foto

Anhänge aus eMails extrahieren


  • Bitte melde dich an um zu Antworten
4 Antworten in diesem Thema

#1 Thorus

Thorus

    Newbie

  • 25 Beiträge

 

Geschrieben 23. Januar 2017 - 09:48

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

        }
    }    
}

Quid agis, prudenter agas et respice finem
"Was du beginnst, beginne klug und bedenke das Ende"

#2 Sunny61

Sunny61

    Expert Member

  • 21.568 Beiträge

 

Geschrieben 23. Januar 2017 - 10:18

Du kannst das Script doch in der Powershell ISE starten und dort Zeile für Zeile mit F11 durchgehen. Dann solltest Du sehen, wo genau es hapert.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#3 monstermania

monstermania

    Board Veteran

  • 1.075 Beiträge

 

Geschrieben 23. Januar 2017 - 12:00

Moin,

nur so als Hinweis für einen anderen Ansatz.

Ein Tool wie Exchange Rules Pro (https://www.codetwo....ange-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, 23. Januar 2017 - 12:01.


#4 MurdocX

MurdocX

    Member

  • 265 Beiträge

 

Geschrieben 23. Januar 2017 - 14:55

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

MCSA


#5 testperson

testperson

    Board Veteran

  • 3.873 Beiträge

 

Geschrieben 23. Januar 2017 - 15:20

Hi,

 

ein weiterer Ansatz wären die EWS: https://msdn.microso...=exchg.80).aspx

 

Gruß

Jan


Good morning, that's a nice TNETENNBA!