You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell删除Archive.pst中的指定Outlook邮件

解决Outlook PST中批量删除指定主题邮件的问题

修正初始代码的核心问题

你的初始代码存在变量名不匹配、加载PST后未正确定位根文件夹的问题,先修正基础逻辑:

Clear-Host
Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Application
$Namespace = $Outlook.GetNameSpace("MAPI")

# 统一PST路径变量名
$pstPath = "C:\Tools\Archive.pst"
# 加载目标PST文件
$Namespace.AddStore($pstPath)

# 定位刚加载的PST对应的根文件夹
$pstStore = $Namespace.Stores | Where-Object { $_.FilePath -eq $pstPath }
$rootFolder = $pstStore.GetRootFolder()

递归遍历所有文件夹并删除目标邮件

由于PST文件夹可能多层嵌套,需用递归函数覆盖所有层级:

# 定义递归处理文件夹的函数
function Process-OutlookFolder {
    param(
        [Microsoft.Office.Interop.Outlook.Folder]$Folder
    )

    # 筛选当前文件夹中主题含"alert"的邮件(仅处理邮件类型,避免误删其他项)
    $targetItems = $Folder.Items | Where-Object {
        $_.Class -eq 43 -and # 43对应Outlook的olMail常量,代表邮件项
        $_.Subject -like "*alert*"
    }

    # 执行删除操作
    foreach ($item in $targetItems) {
        $item.Delete()
        Write-Host "已删除邮件:$($item.Subject)"
    }

    # 递归处理子文件夹
    foreach ($subFolder in $Folder.Folders) {
        Process-OutlookFolder -Folder $subFolder
    }
}

# 从PST根文件夹启动遍历删除
Process-OutlookFolder -Folder $rootFolder

# 可选:处理完成后移除PST加载状态
# $Namespace.RemoveStore($rootFolder)

关键逻辑说明

  • 定位PST根文件夹:AddStore仅完成PST加载,需通过$Namespace.Stores匹配文件路径找到对应存储对象,再调用GetRootFolder()获取PST的根目录。
  • 递归遍历:确保嵌套的子文件夹都能被处理,不会遗漏深层目录中的目标邮件。
  • 过滤邮件类型:$_.Class -eq 43用于仅筛选邮件项,避免误删日历、联系人等非邮件类项目。
  • 彻底删除选项:默认Delete()会将邮件移至已删除文件夹,若需彻底删除可改为$item.Delete(4)(4对应olDeletePermanent常量)。

内容的提问来源于stack exchange,提问作者Pax212fr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:55:20