2010-11-26 23 views
1

Je travaille sur un projet qui implique la lecture de nombreux fichiers Outlook.pst.Suppression de la protection par mot de passe d'un fichier outlook .pst par programmation

Ces fichiers sont tous protégés par mot de passe mais j'ai le mot de passe en question. Le problème est que c'est processus très fastidieux ouverture de chaque fichier dans Outlook et entrez le mot de passe afin de lire les données.

Maintenant, je pense qu'il y a un moyen de créer un script qui ouvre automatiquement chaque fichier .pst pour moi, entre le mot de passe et enregistre à nouveau le fichier sans le mot de passe.

J'ai été googling autour et ne semble pas trouver de solution à mon problème, ressemble à l'interface outlook.application MAPI est mal documentée. Jusqu'à présent, je l'ai vu un script PowerShell faire avec une application Excel de technet

$comments = @' 
Script name: Remove-Password.ps1 
Created on: Tuesday, July 03, 2007 
Author: Kent Finkle 
Purpose: How can I use Windows Powershell to 
Remove the Password When Opening an Excel Spreadsheet? 
'@ 
#----------------------------------------------------- 
function Release-Ref ($ref) { 
([System.Runtime.InteropServices.Marshal]::ReleaseComObject( 
[System.__ComObject]$ref) -gt 0) 
[System.GC]::Collect() 
[System.GC]::WaitForPendingFinalizers() 
} 
#----------------------------------------------------- 
$xl = new-object -comobject excel.application 
$xl.Visible = $True 
$xl.DisplayAlerts = $False 
$wb = $xl.Workbooks.Open("C:\Scripts\Test.xls",0,$False,1,"%reTG54w") 
$wb.Password = "" 
$a = $wb.SaveAs("C:\Scripts\Test.xls") 
$a = Release-Ref($wb) 
$a = Release-Ref($xl) 

Peut-être que je pourrais appliquer à MAPI avec quelque chose de similaire à ce

$outlook = new-object -com outlook.application; 
$ns = $outlook.GetNameSpace("MAPI"); 
$fSaveMe = $ns.GetDefaultFolder($olFolderInbox).Folders.Item("Save Me") 
$fSaveMe.Items | foreach { [void]$_.Move($ns.Folders.Item("Legal")) } 

Est-ce qu'il ya quelqu'un qui a eu un problème similaire? La solution potentielle ne doit pas être dans PowerShell, elle peut être en Python, Perl, Java, C# ou à peu près n'importe quoi tant que le travail est fait :)

Répondre

0

Cela peut être fait avec mapi étendu qui est seulement possible avec c (++) ou delphi. Alternative (et beaucoup plus facile) est Redemption qui enveloppe mapi étendu dans un objet com. Plus spécifiquement, voir la méthode AddPstStoreWithPassword de RDOStores