Question

I'm trying to write a script to disconnect PSTs files from Outlook.

I've been trying with something like this:

$Outlook = new-object -com outlook.application 
$Namespace = $Outlook.getNamespace("MAPI")

$PSTtoDelete = "c:\test\pst.pst"

$Namespace.RemoveStore($PSTtoDelete)

I get the following error:

"Cannot Find overload for "RemoveStore" and the argument count "1".

I also tried a different solution with this (found here http://www.mikepfeiffer.net/2013/04/how-to-test-outlook-pst-personal-folder-file-access-with-powershell/) :

$namespace.GetType().InvokeMember('RemoveStore',[System.Reflection.BindingFlags]::InvokeMethod,$null,$namespace,($PSTFolder))

I took a look to the technect documentations and if I understand properly the RemoveStore Method expects a Folder.

If anyone would be able to give me a hint on this one that would be greatly appreciated!

Thanks!

Was it helpful?

Solution

According to your link the script expects Name of the attached PST, not the path. Try this:

$Outlook = new-object -com outlook.application 
$Namespace = $Outlook.getNamespace("MAPI")

$PSTtoDelete = "c:\test\pst.pst"
$PST = $namespace.Stores | ? {$_.FilePath -eq $PSTtoDelete}
$PSTRoot = $PST.GetRootFolder()


$PSTFolder = $namespace.Folders.Item($PSTRoot.Name)
$namespace.GetType().InvokeMember('RemoveStore',[System.Reflection.BindingFlags]::InvokeMethod,$null,$namespace,($PSTFolder))

OTHER TIPS

To remove ALL .pst files:

$Outlook = New-Object -ComObject Outlook.Application
$Namespace = $Outlook.getNamespace("MAPI")

$all_psts = $Namespace.Stores | Where-Object {($_.ExchangeStoreType -eq '3') -and ($_.FilePath -like '*.pst') -and ($_.IsDataFileStore -eq $true)}

ForEach ($pst in $all_psts){
    $Outlook.Session.RemoveStore($pst.GetRootFolder())
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top