Удалить защиту паролем из файла Outlook PST программным способом - PullRequest
1 голос
/ 26 ноября 2010

Я работаю над проектом, который предполагает чтение большого количества файлов Outlook.pst.

Все эти файлы защищены паролем, но у меня есть рассматриваемый пароль. Проблема в том, что это очень утомительный процесс открытия каждого файла в Outlook и ввода пароля для чтения данных.

Теперь я думаю, есть ли способ создать скрипт, который автоматически открывает для меня каждый файл .pst, вводит пароль и снова сохраняет файл без пароля.

Я гуглил и, похоже, не нашел решения своей проблемы, похоже, интерфейс MAPI outlook.application плохо документирован. До сих пор я видел сценарий PowerShell, который делает это с приложением Excel из 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) 

Возможно, я мог бы применить это к MAPI с чем-то похожим на это

$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")) }

Кто-нибудь сталкивался с подобной проблемой? Потенциальное решение не обязательно должно быть в PowerShell, оно может быть в Python, Perl, Java, C # или где угодно, если оно выполняет свою работу:)

1 Ответ

0 голосов
/ 05 августа 2012

Это можно сделать с расширенными mapi, что возможно только с c (++) или delphi. Альтернативой (и гораздо более простой) является Redemption, который оборачивает расширенные mapi в com-объект. Более конкретно, см. Метод AddPstStoreWithPassword для RDOStores

...