powershell - How can I use EWS to move items to a folder? -


the following powershell script been adapted our situation. read emails in inbox folder extract attachments

it working move items "/processed" mailbox root folder. folder not subfolder of inbox folder :

mailbox l inbox l processed l sent items l deleted items 

if use following line

[void]$mimailitems.move("deleteditems") 

however, doesn't work expected. deleted email in personal mailbox, not "john" mailbox !

so, can me to

  1. correct code move items john mailbox when using code [void]$mimailitems.move("deleteditems")
  2. let me know how can moving items john "processed" mailbox subfolder?
$mailboxname = 'john@domain.com' $downloaddirectory = '\\share\' $dllpath = "c:\program files\microsoft\exchange server\v15\bin\microsoft.exchange.webservices.dll" [void][reflection.assembly]::loadfile($dllpath) $service = new-object microsoft.exchange.webservices.data.exchangeservice([microsoft.exchange.webservices.data.exchangeversion]::exchange2013) $sidbind = "ldap://<sid=" + (get-aduser exchadmin).sid.tostring() + ">" $aceuser = [adsi]$sidbind $service.autodiscoverurl($aceuser.mail.tostring()) $folderid = new-object  microsoft.exchange.webservices.data.folderid([microsoft.exchange.webservices.data.wellknownfoldername]::inbox,$mailboxname) $inboxfolder = [microsoft.exchange.webservices.data.folder]::bind($service,$folderid) $sfha = new-object microsoft.exchange.webservices.data.searchfilter+isequalto([microsoft.exchange.webservices.data.emailmessageschema]::hasattachments, $true) $sfcollection = new-object microsoft.exchange.webservices.data.searchfilter+searchfiltercollection([microsoft.exchange.webservices.data.logicaloperator]::and); $sfcollection.add($sfha) $view = new-object microsoft.exchange.webservices.data.itemview(2000) $frfolderresult = $inboxfolder.finditems($sfcollection,$view) foreach ($mimailitems in $frfolderresult.items){      $mimailitems.load()     foreach($attach in $mimailitems.attachments){         $attach.load()         $fifile = new-object system.io.filestream(($downloaddirectory + “\” + (get-date).millisecond + "_" + $attach.name.tostring()), [system.io.filemode]::create)         $fifile.write($attach.content, 0, $attach.content.length)         $fifile.close()         }     $mimailitems.isread = $true     $mimailitems.update([microsoft.exchange.webservices.data.conflictresolutionmode]::alwaysoverwrite)      # following send items personal "deleted items" folder instead of john mailbox...     [void]$mimailitems.move("deleteditems")      # how can send items "/processed" folder of john mailbox ? } 

the move method take folderid of folder want move item need first find folderid of folder want move eg

function folderidfrompath{     param (             $folderpath = "$( throw 'folder path mandatory parameter' )",             $smtpaddress = "$( throw 'folder path mandatory parameter' )"           )     process{         ## find , bind folder based on path           #define path search should seperated \           #bind msgfolder root           $folderid = new-object microsoft.exchange.webservices.data.folderid([microsoft.exchange.webservices.data.wellknownfoldername]::msgfolderroot,$smtpaddress)            $tftargetfolder = [microsoft.exchange.webservices.data.folder]::bind($service,$folderid)           #split search path array           $fldarray = $folderpath.split("\")           #loop through split array , search each level of folder          ($lint = 1; $lint -lt $fldarray.length; $lint++) {              #perform search based on displayname of each folder level              $fvfolderview = new-object microsoft.exchange.webservices.data.folderview(1)              $sfsearchfilter = new-object microsoft.exchange.webservices.data.searchfilter+isequalto([microsoft.exchange.webservices.data.folderschema]::displayname,$fldarray[$lint])              $findfolderresults = $service.findfolders($tftargetfolder.id,$sfsearchfilter,$fvfolderview)              if ($findfolderresults.totalcount -gt 0){                  foreach($folder in $findfolderresults.folders){                      $tftargetfolder = $folder                                 }              }              else{                  "error folder not found"                   $tftargetfolder = $null                   break               }              }           if($tftargetfolder -ne $null){             return $tftargetfolder.id.uniqueid.tostring()         }         else{             throw "folder not found"         }     } } #example use $fldid = folderidfrompath -folderpath "\processed" -smtpaddress $aceuser.mail.tostring() $subfolderid =  new-object microsoft.exchange.webservices.data.folderid($fldid) $subfolder = [microsoft.exchange.webservices.data.folder]::bind($service,$subfolderid) 

then change

[void]$mimailitems.move($subfolder.id) 

Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -