Thorus 10 Geschrieben 23. Januar 2017 Melden Teilen Geschrieben 23. Januar 2017 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 } } } Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 23. Januar 2017 Melden Teilen Geschrieben 23. Januar 2017 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. Zitieren Link zu diesem Kommentar
monstermania 53 Geschrieben 23. Januar 2017 Melden Teilen Geschrieben 23. Januar 2017 (bearbeitet) 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 23. Januar 2017 von monstermania Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 23. Januar 2017 Melden Teilen Geschrieben 23. Januar 2017 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 Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 23. Januar 2017 Melden Teilen Geschrieben 23. Januar 2017 Hi, ein weiterer Ansatz wären die EWS: https://msdn.microsoft.com/en-us/library/office/dd633665(v=exchg.80).aspx Gruß Jan Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.