使用Outlook 2016自动将公用文件夹导出到PST

时间:2018-07-19 18:37:00

标签: powershell automation exchange-server devops

我正在寻找一种使用Outlook的“导出到PST”功能进行自动化的方法,以便将名为AZ的公共文件夹作为单独的PST文件进行拉出(因为存在PST大小限制),我希望使用一种纯Powershell方法。

到目前为止,我发现的内容不是自动的,但是当我不得不快速地复制某人的文件夹时,这很有帮助。

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")

    #Get the public folder ID
     $SourceFolder = $namespace.PickFolder() | Select EntryID

#Get the destination folder ID
    $DestinationFolder = $namespace.PickFolder() | Select EntryID

    $namespace.GetFolderFromID($SourceFolder).CopyTo($DestinationFolder)

这里的第二篇帖子https://serverfault.com/questions/180916/export-exchange-public-folder-to-pst-from-powershell似乎很有帮助,但是我遇到了有关自动发现URL和/或可能的权限问题的错误。

还发现了this看上去不错,但我不希望在我的前景中附加PST。

任何指针将不胜感激!

2 个答案:

答案 0 :(得分:0)

将Exchange本地公用文件夹复制到本地Outlook PST文件。 感谢:https://github.com/misterGF/DevOps-PowerShell/blob/master/export-PFdata.ps1 https://www.vistax64.com/threads/looping-through-outlook-folders-and-subfolders-returning-numberof-e-mails.249828/

How to disconnect PST file from Outlook using Powershell?

设法做到这一点,并使它具有某些功能,请自行承担使用风险。不执行任何错误处理。

function Get-MailboxFolder($folder)
 {
    Begin{
        $Outlook = New-Object -ComObject Outlook.Application
        $namespace = $Outlook.GetNameSpace("MAPI")
    }

    Process{
        New-Item -Path 'E:\PST.archive\Full Backup\Enterprise West' -Name "$($folder.Name)" -ItemType Directory    

        foreach ($f in $folder.folders) {

        #Location of PST files
        $PSTPath = 'E:\PST.archive\Full Backup\Enterprise West' + '\' + "$($folder.Name)"

        $PSTName = $($f.name) + '.pst'

        $FullPST = $PSTPath + '\' + $PSTName

        $namespace.AddStore("$FullPST")
        $pstFolder = $namespace.Session.Folders.GetLast()

        "Start Public Folder copy to local PST"
        [void]$f.CopyTo($pstFolder)

        }
    }#End process block

    End{
        "Removing attached PSTs from Outlook"
        $RemPST = $Outlook.Session.Stores | Where DisplayName -EQ 'Outlook Data File'

        foreach ($pst in $RemPST){
        $Outlook.Session.RemoveStore($pst.GetRootFolder())
        }
    }#end End Block
}

$WestFolders = $Outlook.Session.Folders.Item('Public Folders - YourNameHERE!!!!!').folders.item('All Public Folders').Folders.Item('Level-1').folders.item('Level-2').folders.item('Level-3')

Get-MailboxFolder $WestFolders

答案 1 :(得分:0)

没有将公用文件夹导出到PST的自动方法:

导出邮箱命令不适用于公用文件夹。

您可以使用以下方法来实现:

1)使用Outlook:导入/导出向导

2)使用第三方工具