Powershell Forms: Migrar buzones Exchange/Office365 a través de Outlook


Una nueva entrega de formularios en powershell. El siguiente script migra el buzon de un servidor Exchange/O365 a otro servidor Exchange/O365 a través de la conexión MAPI de Outlook.


Delegaremos en Outlook la conexión a ambos buzones Exchange (ya sea on-premise o en la nube).
No hay problema en conectar a dos buzones Exchange en el mismo perfil de Outlook (2010 en adelante), salvo que hay que hacerlo con Outlook cerrado, desde Panel de Control > Correo.

Una vez configurados ambos buzones y abierto Outlook, podemos lanzar el script, que detectara los buzones de tipo Exchange (ExchangeStoreType = 0 o 4) y los añadira a los desplegables para que elijas buzón origen y buzón destino.

El script recorrerá todas los almacenes habituales del buzón y moverá los elementos al buzón destino:
  • Bandeja de entrada 
  • Calendario 
  • Contactos 
  • Borradores 
  • Elementos enviados 
  • Notas 
  • Tareas
function Release-Ref ($ref)
{  
([System.Runtime.InteropServices.Marshal]::ReleaseComObject(  
[System.__ComObject]$ref) -gt 0)  
[System.GC]::Collect()  
[System.GC]::WaitForPendingFinalizers()  
} #Fin Release-Ref
function MigrateContent($sourcefolder,$targetfolder,$breadcrumb)
{
$items=$sourcefolder.items
 foreach ($item in $items)
 {
 write-host "." -nonewline
 $item.Move($targetfolder)|out-null
 }
$folders = $sourcefolder.Folders 

 foreach ($folder in $folders)
 {
  try{$targetfolder.Folders.Add($folder.Name)}
  catch{}
        $Subfolder = $sourcefolder.Folders.Item($folder.Name)
  $Subfolder2 = $targetfolder.Folders.Item($folder.Name) 
        Write-Host $folder.Name -fore cyan  
  [void]$ListBox.Items.Add("   $breadcrumb\$($folder.Name)")
  $listBox.TopIndex = $listBox.Items.Count - 1
        MigrateContent $Subfolder $Subfolder2 "$breadcrumb\$($folder.Name)"
    }  
}
###main###
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$mailbox=@()
$a=""|select id,description;$a.id=9;$a.description="Calendar";$mailbox+=$a
$a=""|select id,description;$a.id=10;$a.description="Contacts";$mailbox+=$a
$a=""|select id,description;$a.id=16;$a.description="Drafts";$mailbox+=$a
$a=""|select id,description;$a.id=6;$a.description="Inbox";$mailbox+=$a
$a=""|select id,description;$a.id=12;$a.description="Notes";$mailbox+=$a
$a=""|select id,description;$a.id=5;$a.description="Sent";$mailbox+=$a
$a=""|select id,description;$a.id=13;$a.description="Tasks";$mailbox+=$a

$objOutlook = new-object -comobject outlook.application  
$n = $objOutlook.GetNamespace("MAPI")
$stores=@()
$n.Stores|?{'0','4' -contains $_.ExchangeStoreType}|%{$stores+= $_.displayname}
#Formulario
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][System.Reflection.Assembly]::loadwithpartialname("System.Drawing")
$Form1 = New-Object System.Windows.Forms.Form
$Form1.ClientSize = "400, 400"
$Form1.text="SistemasWin.com | Mailbox Migration by Outlook"
$Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe")
$Form1.Icon = $Icon
$Form1.backcolor=[System.Drawing.Color]::GhostWhite
$Form1.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
$Form1.maximizebox = $false
$Form1.minimizebox = $false

#cabecera
$base64ImageString="iVBORw0KGgoAAAANSUhEUgAAAZAAAABVCAIAAADojyUoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAGmpJREFUeNrsXQl4VNXZzmT2fU0yWSb7SgIkIUAAUYFfRUGMgqL5kUW0UhYtttoWqvavS31stYobLlArVoxQFhVFQKiIbAlbQiArCSFk3/dMZpL/S8am4Z6TmcnMzUwC3/vk4Qk3d+69c+4573m/73zfdzjK1bs9EAgEYjTAE5sAgUAgYSEQCAQSFgKBQMJCIBAIJCwEAoFAwkIgEEhYCAQCgYSFQCAQSFgIBAIJC4FAIJCwEAgEAgkLgUAgYSEQCAQSFgKBQCBhIRAIJCwEAoFAwkIgEAgkLAQCcR2BN3KplMPRK0Vj/ORBWklti3HXmTJ8WwgEEtZIAdeTE+Mr91OJQ3XS8QZlqLc0QCX2V4vhT/svVCFhIRAIdxKWQSMe46uI8JFF+si85EKtTAg8JeShlYpAINxKWByOhz/IJZUYSCrcRxaslfqrRUBVeoXIrqf05OCrQiAQw0VYwFAGtSRKLxvjpwABZdBI4BedTIAtjkAg3ExYXE+OVioI9ZJG6nt95EBM8G+0Xq5XirCJEQiEmwlLLRF4yQUhOinopjBvaahOCoYe8JQnZ1hstx58UQgEwk7CAnryVggNGrFlCc9fLZoaptXKBCI+F1sQgUC4mbA0UoGfShTmJYsLUIR7yaaEaxQivkSA9IRAINxNWCoJ36CRhOgk3nJhkFYapZfFB6rkQp4YGQqBQIwowvrssUkJgSrgLKQnBAIx0gnrrnF6bAUEAjEqgGHlCAQCCQuBQCCQsBAIBBIWAoFAIGEhEAgEEhYCgbjRwMMmQCD6oZYIhHxP7n/KGfX0eJi7u6ubjd09mM86BEgEXK1MAG3W32rm7p66FqPR3H1DEBbWw0K4wtzgcLY+PineoOpP4Ych19JpmvjCwfo2I7aP/UidbHjpvrj+/1rY/oGNxw/n1dygCstPJVZL+cauQQl7qBPiYIzI5XKEPE+jqfdGnabuoppWnGuvVwBPgTQQ8Rl+Ei4Hp8uh0grXkywdLGCjmPDoICySI/4wN/q+RH8XCHVOXz/ul7VHCmp/t/080Jbbh5ZSzA/RSUO9pOHeMo1U4C0X9iVXQYNwgF7rWo21rcas0saciubLtW3tRjOOIsd6Grx0bJahtyNdwN4ohMXjMr+qQsQjZkJX4I5YnzG+ivnvHsurbHFLU8T6K1InGaaGaw0aiVzEs1kCv81obmzrulDetC+7cvupq7UtaNog3ANW5MXoICw+lzksze4zzAwa8YOTDH/66qIrb6pXiO5J8E1J8BtvUA2pzg+cDD++KtGsGO+1t0Xsv1D10Y9F56404vihyit0rrNmmNzICouEG4V6c4cp43K9y24n4nNX3Bqy/KYQIEpnWU8penhK4PwJ/t+dr3zl29zcimYcWQhUWK74qu7iq+Katsc/OX2iqM41twMpB2wVb1CxeE0QXPcm+t0Spdv470tvHijoNHXjWEKMFowWp3uPHZJz2LEvu3JtWubV+nYX3Ess4K6fE716ZtgwXV8jFaybEz09UvfrtEx3+eOGD95yYYepu6m9C0f4yMENZBJyiK9qcrnEeudg4Qtf53R0uWK5LdZf8d6ihHEBSptnQjuU1rU3dXRllTaW1rdDQynF/InBanFf5B6MW+sfnx6h27V6ylNpWXvPV1wHQyLUS3p/UsBNEdpQnXTdjuzdZ3G3cDQJ3UNYpOZy3d1hol6/M3vLsRLX3C4pWP3hksQQndTKOVXNnQcuVP2QW51b0VJU09pISAk+19NHIYQBnBCouiPWJzFINdiOIX4qMdzu0Y9PfZddOUpHgloieHBywOxYPRB9/96XAtxCfMTZSTeMSehG5JQ3P/bJadAvrrldjK/8k+VJQCKDnQD09OaBgv0Xqqxbpl3mbhBc8HM4r2bD9wVj/ZX3JfqvmhlKrrcC5CLeB0sSl2zK+Hdu9Wh8R4umGF5IiSUMEOy816NdiU1gBf86dTX1w5MMthoboLwn3m84dmAMUIv/vswaW717qPDed459/NPlIfnRYGbLLG3845cX5r117FAOnZLAkHx/ceIYP8VofE1SAY9mgGD/RcK6kfDG/oKVn565VH1NUDuYVztXTVk6LWg4AnZeui822lc+mLB6YOOJdTuyi2vaHL7+scLahz44+cHhIupfwYR87YGxo3EvEuqbwAh1JKwbBbUtxie2ngNJwljy/8XNIR8/kqSTCVo7TazfdM2sMBBu1D8dLahN/eDkPjZ8TB1d5vU7soH4qHnzU8K0z98dM+rel5EWmdGD+4Vfj3Dch3WiqK68oQP+zbzSWNnU6dEX4BOklUyL0I71V2qkgphBxMIIB1hPv/r83OnLDQMPqiWC9XOjH50ebPlvl5nlwQC22Lq7ogdr5yWbM6qbO9m6V5e5G0xLEd/zORo3LZ8evOtM2fFLdaO9Z2PKMhLWzzheWPdFRum2jNLmDhM52r86Vw6/3J8UkDrZMCPaa3Q1x87TZc/uyi691kMU6SN7feG4myJ0/9WlbAvT5+6Optpi+VUtqz49yyJb9eP1ffneCuGKW0IZx/lcz3Vzou9/7/goCiilVh/iIGEhYZ2/2lRQ1fL0tiybQwjobE9m+ZsPjY/zV44KqQXj8+2DhS/vyWH4PqaGa+FbRHjLrjGkWR0MYIjdEUvZHRLmg9WfnoUGH6av/NLXObdGeUXrmW/n5khdSoJfWnrpqPFr4IrgDYMhSIXciuZ92ZVL7TZP2ozmx/5x+t851RfLnc1ZG+6oK/hGj/3j1AtfXWSw1YpbQz//xSQGW7H8AjicZ+dGUwnww8NFw5oDBIT49BdZ1Mozy6YFc0cPC3DsPmjjOhwPlGXXCWEBWx2/VOdAiYLf7zifUVzvPGcNH+CrLd6U8eXZ8oEHNVLBq/ePfWV+nELMH9a7x/orEoNUVGPw3UOFw/3df8yvoYaDJwarJoaoR0snpk5nppG6SghGt1zE08oEKgnfvWuywM4ifu/DqCUCqZAHDzbyZyl7TcKyho4nt55z7B5rPjv75ZqpI9Mw3Hu+cm3aufKGjoEHQ72kb6fGgzHoggd4cGIANQb9lW9ya1xSu2rzkeIFSQEMN5CA6/nY9JDjhYPqOzihu6fHUuQH/gGd6HycB4wWuE5PX+Jo/9XIq8Jp8FdOn4SynMbnUoaZTNTbty3fC8gLrgzj06Kg4QquDHqA9xull8X6Kcb4KSaFaICqoPV4fd+iy9xT29qZU96cXdacVdpYUN3C6IrsAr54iE46LkA5L963tdM0IUgt5MOT9JrU5r6H6TJ3782qPFfaUFDVmlfRPBL8mPDW+nrFz+LXLsI6U9Lw9LYsKycASZMO+IF480ABaJY4f4XDD8064GWAhHnp6xzGVDxnnP5vD463noXH1uMoxfy5432p8uqbLBcl96UX1x/Kqb5tjDfj+IxoL71CVNFEGT+LkgPXzArr6WMTS1469PXHPzmd40S9mpQEv9/dGfVzy/4nJOHZXdkHLlQNPG3ljLDFUwJ7CavPqQ6/wNsLUFNCbcHQfvzmEG4fl3V3//d8ixl+vqxp5ZYzzu+JYAWgnpKC1HPG62fFeBvUksHqTQbrJEAclt+htTOK6tPSS0H5NrSxmbkd7i2bHqFbkOQPvAnKzsqZFp9mR5e5pK79i/TSrzPLc9xnHt0e67N+TvTAKpV2EdbhvBqq6xdaYeWMUDBquByOydyTdbXx1b15VA/X9xerHp4S6DhhsV2dobbF+NvtWdtPXb1GbXpyVtwa+kJKrE1+ZGt2nhyqCdJKyOM7T5e5rKgxDOF/Hi8hCQsmmIQg1bc03gQbNopw1euA4p0gLBDgZNCsPxH0nxCojLZPqnvJhV6Dzzph3tL1O85bwnEGNgVb3lKQ57+dHXVLlG5In4IZAiYw+AGJ8NKeHAZZOwYfhXD59JAVt4QMybkBqjDSR/aHudFP3R7xydHLf9ufz2grF+DmSN3mZRNkQt7QTEJou40/XCKPr7glNDXZMLCiQHKYZpxBCZqFujfGe4cuAcE5xlndrAr4zNLGp9IyM4qvKcKnkwmAqh6abHDlK4G5lzzY2N61PcOlK3RH8mtgbofRwjg+M9qLSlhkyQpQLibn1IqJFtpG+qHY6gg1zcZhsndA7j03L2Z+or8z/qCEQNX2XyZ/duLK87svOBzUAg+QOtkAutVf7XjpR4mAC7P47Dj9c7uzGX7eYUW8QbV5WRKDrTzscbpbAkQZB+ELLLspiKx/MjlEs35uNFWiw3UcbnqyIDLX0Uiovecr5244ymCrCG/ZjlVTXMxWYCNMo7nJfsitcXGBqpoW4+niBvL4pBAN9fzhyKO085Js+Z5gVhgODTsxWP3Nr6Y9kBTAivca6ObAr6ePNygd+KyA6/nXB8a+lRrvDFsNtFs/WT7x6TsiXdMhwSzdtGxCf+GNoRHWzlOUVaQ1s8JIo6Cfs/7vnjHUP51ytLIw6dB1YHo0mrs3/Vic+sFJRl23O8fqv3pyqj3Fp9iFt1wU6iWlms+udxZQXw1YhVIhRYOTlVuAwnhcp6Jp7STBHpZsNpWEz3r9mXnxvrtWTwnUSKx3worGjqKa1it17Vfr22GqsL5YEaSVfPbYpKHaJWqJ4J1F8cumBVs/DQZCWUP75dq2kro2kNhtthgctMi6OdH2ORocb0ZgWLAEw2hD42RRPc+mvCLrly+ZGgRd2cqnYBxS/bXHCh2MKiLthb/szQMDMzlUY+cV4GGe/iLLEoU/cJCsnBEKAl7AdUNOpZdcSN1O4oQ70mIKqigbl/mpRNMjdGRtPzPFUusxdTtlYdkpnYpr2mCMefxn9RDeIKhvH4WQLJsDGqqp3cTncvr2H+49u98TCk8L/UHM51pfKRoSbo3yem9RApXfAQ1tXSDqjxXWHsmvLahusTwYry++IVgr6Y0cjvMBM5Aasg8DeMujE+e9dRQ4zp4nEfI8YcBbSTIprG49eLEKnudMSUNVc2dHVzdMFmB8QTPG+SvvHOsDzzPYotMzsyPbjKY39hcM1SSy3+O2ackEatUQmFMf2HicZ9PUJ3sSzCTWYxSg6VMS/EjPV2ZpIzRTUvCQA3zIWQimhXvfOfZiSuzy6cE2P37+atOKLafh34EHoW9teGj8/An+Hm4C1Xlc12p0yybD0J4gWhmbhoFd4/zOF+zitX35bx3sDU/rW/jrfcIucw/YPjCJMs58bteFLcdKpEIudOC+/sMBNujpW+GFI6buHhYjG0AOvPHgeCpbAR2kpV95fV8+tPDA431uQDNoHNBZPxXU/vW7vKnh2jUzw0DvkxcJ0fVef+HGE/YEl/3urqjB2AoG4BfppdAsZMVHMJCrmzthjHx+8opWJnhkWvDqWWFKmp/+2bkxp4obfsyvYf3lwqzz+sLxyWEUFZJ9tenhjzKA9z1tDXVm4TrLtp027z09krI+Ai3i2JzGoyXvQRP/+ovMp9IyrV/z0+Ml97x9lMFWQBY7ViW7ka0sjjPyYH5VS12rGyqRg+KglqBQS/gjirCAejq6zPADEykwLFgxXeZuaskd4H04GfoGnAOsAR+BX6DPwL/wQRbZClj+7f+ND9ZJqMNs9t+OPLn1HIOtqDha0Fv85+lt9NyDWTHe9szNd4/3fWJWOPVP7x4qnLvh6NsHCxttlbqvbTH+5bs80HSMEgD909if58cp2Q6oFvE9QUDMGUfh67zKlvs3nrAoaxuERXp/wZwGAWXz9lqpgBp40ujQvgAiwaDPuflIMUgtqpcaptU/fXVx9T/PMnYPhUnsyzVTJ4do3Dv2on0phAWyv8vshmi9uhYjiDvyuK9K5DHiQQ0cdZmZv3CSAWwo8jiMdiCgs1cahnS1Dw8XrU3LpPLpM7NtrPdJBNzn58WQ/n4g7j/s7K0pNKRdOc5daVzw3nGqcxNIgJS0TuLFe+Ooq16gQBdvSrewlW3CImeGcPsS60DX6WRCqshivceAmTlvw9Gvr/VPlda3L92cAVKccfKvbgvf8uhEm7szWIfzK0A8T463nMIFuW4K0gPBQnWRaKXCkU9Y1OHNcwlhKcT8VTNCyeOXqlsXfZReUudItUUwyqg5cGCpPZwcaOWDIMGow/PFr3PePuhImhfMYUs2ZeTTYjBXzgwl42AcBvDsozT9CGwFpDkwctXT5hMzjvjZPeVSLUfHTEIyDovhZAWLZvGmjA3f/+wLzCptnP/ucUaWnEzIe39x4h/njeGNgIQpsYArFVI87lXNne56pIrGDqpQ9xidcI1QTZ1sIJfLweQEOdMvChwA9GSqk2hBkr9cRPc762QCslgQ4FBO9ZsHChx+Epj4n9mWRU4JwFYpiX6stOEjNwWvvS2CPF7Z1Amkz0hDttEd2zrN1pnCCqgt2+JQrU5yzeH3d0WtmRXG0L3P7boAIvzVvXlgJDK2NQYzdtfqKQsnBoyQ4SQV8qheAKpd5hrU0m49KqpKUfukC7IF4SUupVlGH/902clt06DDv7wnlwzQBQF1Z5ye+pEFSQGkwVjTYnxy6zknmwIoj7G8bsGi5MDBtmKyH6AKX1kQN4i4Sz9TwjSoR8f8SQbpwLT2Qkos/DAiA77Nqnh5Tw4jbXhGtNfnj092YHVy+CDgelJfNosL7UOWsbSl6J6e0Vpo2AU6elwAJU+otdP04SBV84eEY4W1+2mpOdRlRBgfVHf19lOljpmlDGw+UkzmXcb6KRxOtrNgeoTuxZRYAS0kZfnHp6hlb20QFhlPYb/CoiZbSByqp8Eh7tlq7B3YILJ2r5karbcWY7FuTvTWX0zyUbDpi3F+EJt7A5d67GQN14BaGX2wwKIRBWpLsl7GmsQ8WuL67rPlbNVcBKVGdofkUA3ZmUN10kRiKayjq/vzE+zkeIF9Su50ByxpfyAk2bdvjtRtWjaBLLDTZjQv3pQ+2PZONtiHLIzd0G6vzdJAW5KQidgZAP1RihOD1f9amUzdvkEjFWxeNuGZ2ZHOC1eXYbjLb41Aw2qYMNybUMDIiAug6AsWExXSi+srm5mORR+l0EAE008M0ZBTy4WyJjIsyWETNYOWvDXYEhxV3Q7kK1Cm7y1KINe+gGR/ueXMD7mDBnnZICy1lDl+iqvtUpgZxfWNtPoYWjtiuIYKMN0/Wpr4/LyYgewKYnXHquT7Ev1H5nACOUMNt3Fj3BN15bTafYsAIxzQk8lIupoW40/5tWzdoqm9K/va+EGLe4TcFXwqLdjyYE4Vi1UMTxVT4hvAuLE/sbR/Cgn1km55dCLpcYPZ8ZefnqZWlPyvpW/9HkFaKcNLf6G8yZ6HA11HLaWkGQbCsqiDtbdFRPnIt568AmMsKVj9xP+EOxm7MKxo7jCBoW7wYL6zQK3EXY9EvXVVExIWHZF6uTdhml0sbyI1kTPILmsiS3ow8uy4nhyq0jlZVM/ik+T01fNj5EIYNGKlmE/mZlDrQVmsIr1StGnpBJLrwWB8Yuu5nafLrD+GDcKK0sv2nr/myLkrjWdKGmzGjlJDe/UKEVsmIRV3jdPfNU7vgs7qvDu302Ru76IorHAvmVuGn4jvSc3CKalvs69BOKzXLBuKweIGuxU4ghQX+ZUt7D4LdcJgRPMCiZCaC2yr0vp2Fp8ErlbZ1MFI7dbJhcDalGQyWl/oq27K+fiRJCp7vLwn95/HS2w+hg2TMMaXaaU39mZ4255DqLt+jjMo3R5fPlI8LD0eJTRO91WK+O7IxNZIhQoRxRrNGcHF+N2LQBq/t3ayXLKGGmvCKBkq5HHlYqYOqG3prGHVnG9o6yLZE8QdNXqJaia+mBK7e81Uqp/+lW9yX9uXZ89j2NA7MOvC3AtsPfDg5iPFYIVayX8+UVRHrfA7IUiFHd06F4T7yKA7ut5zFKSVkOIXZs5L1a34pqjwU4lpnhCWo1LqaYTFuLVUyCW1HthvzazuTw4mG1l/hsvhKGiERXVsUbP9Td09f/0u75Vvc+18DBuT+bRwbX/B6X58f7HKSj8+f7Up7WQpdXVpEsqrgf4OWkFhnUwgF7khkiDMS0oGLtW2GMuGc0+EUQ3qa2K9imlju4l0nIuvXfXu1eQc0mHUY2Y7sIMMZO2tS0NVWHZfE+wMkFf2P4Nt6yMlgRIx8JttmT8VUFZDciuaTxbVgQSj2IMBSi+58ProrKx0hJJBMvjdQutUj/tgmdjX66bKQ9qXUEir/9fGdhVTI62wBIM4eugRv+yHdVAj9ai+S/tv7a8Wr54ZxiZhJQSqyMKY5Q0dD75/YteZsswB4WRnShr2ZFY8lZZJvc7KGWFOxsVeZyhraKcW9r+bFo443AP1JlqxZreUEhwtMJld4ekX8Ch7BTJY1WXzB7Xucwdt7Yi68kDdowh4/8V77apqZ4Ft6yMpWL32tog1n51lGskdpqWbM4CDYnwVEgG3pdN0tLB2sF3Vbo7UjfGTYy8fiJoWIzDCvHgmPSWHakJ00qIa1zmPYv0USbRtU9OL7V0X7xmWGX1Eg+ohErMdoqwQ8UhTnZG/BRKMJAg+z5PP5XSxKvjI7Fe4NbVgFJVCV396Fo5vSI0nxemrC8Z2d3v8/adiFhSWhbOo+7t49HmstmWU/uPo5X+dumplD0hQfa4vmj7y8R1tLVUrE7h4O4x58X5kPtfl2rYMuwmL01vP88ba5Z0acEAGWjsJDW0jhorGzmvtUBOZ0QVMx27WhIjPJR8Gblxv9/6JpQ3taemlz+7MJr1yoN1eWzg21Y5ubxdhxfjKn7o9wuEag7+5I1KvFHkgCBzKqaZmO9+f5O+yJD6VhE+tvApkOli1RXJ4AFk5WTBPMNrq2FyupUhgag04Z+BLGzil1wbHtXaaWwnfmVoqoO464zC85AIyTaWuxUhd0aamxFrqLH5wuOjPe3IoTMThgPiyWU/F3l4yLVz77qIEBzYvWjI1KCXBD+UVFWUN7dTUMzAJZw6+iQDr8orcocRo7v785JXBPkLtjmKBU9YQNQrMGTgQwDmkjVSLatrIk6P0MnYrnVL3VWIExHR0ma8QJRnA7IrwYTMIOdxbRi6aFde2UneopjZjv3v+tX357/9AKWgBxu/rC8fNterD/X8BBgCrfbWaegNtdAAAAABJRU5ErkJggg=="
$imageBytes = [Convert]::FromBase64String($base64ImageString)
$ms = New-Object IO.MemoryStream($imageBytes, 0, $imageBytes.Length)
$ms.Write($imageBytes, 0, $imageBytes.Length);
$logo = [System.Drawing.Image]::FromStream($ms, $true)

$pictureBox = new-object System.Windows.Forms.PictureBox
$pictureBox.Location = new-object System.Drawing.Point(0,0)
$pictureBox.Size = new-object System.Drawing.Size(400,85)
$pictureBox.TabStop = $false
$pictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::StretchImage
$pictureBox.image=$logo
$Form1.Controls.Add($pictureBox)

#linea
$mypen = new-object Drawing.Pen black
$mypen.width = 1
$formGraphics = $Form1.createGraphics()
$Form1.add_paint({$formGraphics.DrawLine($mypen, 0, 85, 400, 85)})
#source
$objLabel1 = New-Object System.Windows.Forms.Label
$objLabel1.Location = New-Object System.Drawing.Point(5,100) 
$objLabel1.Size = New-Object System.Drawing.Size(50,20)
$objLabel1.Text = "Source"
$Form1.Controls.Add($objLabel1)
$objComboBox1 = New-Object System.Windows.Forms.ComboBox 
$objComboBox1.Location = New-Object System.Drawing.Point(60,100) 
$objComboBox1.Size = New-Object System.Drawing.Size(300,20) 
$objComboBox1.Name = "source"
$Form1.Controls.Add($objComboBox1)
$objComboBox1.items.addrange($Stores)
$objComboBox1.add_selectedindexchanged({
 $Form1.Controls.Item("target").text=""
 $remainingstores=$stores|?{$_ -ne $Form1.Controls.Item("source").text}
 $objComboBox2.Items.clear()
 $objComboBox2.items.addrange($remainingstores)
 })
#target
$objLabel2 = New-Object System.Windows.Forms.Label
$objLabel2.Location = New-Object System.Drawing.Point(5,130) 
$objLabel2.Size = New-Object System.Drawing.Size(50,20)
$objLabel2.Text = "Target"
$Form1.Controls.Add($objLabel2)
$objComboBox2 = New-Object System.Windows.Forms.ComboBox 
$objComboBox2.Location = New-Object System.Drawing.Point(60,130) 
$objComboBox2.Size = New-Object System.Drawing.Size(300,20) 
$objComboBox2.Name = "target"
$Form1.Controls.Add($objComboBox2)
#boton
$button = New-Object Windows.Forms.Button
$button.Location = "60, 160"
$button.Size = "300,20" 
$button.BackColor = [System.Drawing.Color]::Gainsboro
$button.text="Migrate Mailbox"
$Form1.Controls.Add($button) 
$button.Add_Click({ 
 if($Form1.Controls.Item("source").text -eq '' -or $Form1.Controls.Item("target").text -eq ''){write-host "select source and target mailboxes"}
 else{
  $this.enabled=$false
  $ListBox.Items.clear()
  $mailbox|%{
   write-host $_.description -fore magenta
   [void]$ListBox.Items.Add("Migrating $($_.description)...")
   $listBox.TopIndex = $listBox.Items.Count - 1
   #[System.Windows.Forms.Application]::DoEvents()
   $sourcestore=$n.Stores.Item($Form1.Controls.Item("source").text)
   $sourcefolder=$sourcestore.GetDefaultFolder($_.id)
   $targetstore=$n.Stores.Item($Form1.Controls.Item("target").text)
   $targetfolder=$targetstore.GetDefaultFolder($_.id)
   MigrateContent $sourcefolder $targetfolder $_.description
   }
  [void]$ListBox.Items.Add("Finished!")
  $listBox.TopIndex = $listBox.Items.Count - 1
  $this.enabled=$true  
  }
 })
$ListBox = New-Object System.Windows.Forms.Listbox 
$ListBox.Location = "60, 190"
$ListBox.Size = "300,200" 
$ListBox.BackColor = [System.Drawing.Color]::GhostWhite
$listbox.font=new-object System.Drawing.Font("Trebuchet MS",9,1,3,0)
$ListBox.borderstyle = 0 #0=sin borde, 2=borde 1=hundido
$Form1.Controls.Add($ListBox)
#muestro el formulario
$Form1.Add_Shown({$Form1.Activate()})
[void] $Form1.ShowDialog()
write-host "bye bye"
$a=release-ref $objOutlook
$a=release-ref $n

Comentarios