Powershell 使用COM对象(MAPI)清除outlook客户端上的邮箱

Powershell 使用COM对象(MAPI)清除outlook客户端上的邮箱,powershell,outlook,Powershell,Outlook,我只需要一些代码作为计划任务运行,定期删除某些outlook客户端邮箱的收件箱/已删除项目,以避免聚集数据的累积 当我运行上述命令时,我得到的值不在预期范围内,我有代码可以删除子文件夹,只是上面有一些不正确的地方,我正在努力查看它是什么。有人能帮忙吗 提前谢谢 请参见,您会丢失一些代码位 $olFolderInbox在代码中为$null,正确初始化$olFolderInbox后,项目将在$inbox中找到。项目集合 你应该试试这个: $outlook = New-Object -ComObjec

我只需要一些代码作为计划任务运行,定期删除某些outlook客户端邮箱的收件箱/已删除项目,以避免聚集数据的累积

当我运行上述命令时,我得到的值不在预期范围内,我有代码可以删除子文件夹,只是上面有一些不正确的地方,我正在努力查看它是什么。有人能帮忙吗

提前谢谢

请参见,您会丢失一些代码位

$olFolderInbox
在代码中为
$null
,正确初始化
$olFolderInbox
后,项目将在
$inbox中找到。项目
集合

你应该试试这个:

$outlook = New-Object -ComObject Outlook.Application;
$ns = $outlook.GetNameSpace("MAPI"); 
$inbox = $ns.GetDefaultFolder($olFolderInbox);
$items = $olFolderInbox.items

foreach ($item in $items)
{
$olfolderinbox.Items | % {$_.delete()}

如果要修改集合,请不要使用“foreach”枚举数。使用项目的向下循环。倒数到1。你是对的,我以前遇到过这个问题。我将提供另一个片段。这很好,但它仍将数据保留在“已删除邮件”文件夹中,不会永久删除!:ZAnswer udpated(只需在已删除邮件文件夹上重复操作)。感谢您的帮助,非常感谢。
$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNameSpace("MAPI")

$olFolderInbox = [Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox
$inbox = $namespace.GetDefaultFolder($olFolderInbox)
for($item = $inbox.Items.Count; $item -ge 1; $item--) {
    $inbox.Items.Item($item).Delete()
}

#to empty deleted items
$olFolderTrash = [Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderDeletedItems
$trash = $namespace.GetDefaultFolder($olFolderTrash)
for($item = $trash.Items.Count; $item -ge 1; $item--) {
    $trash.Items.Item($item).Delete()
}

$outlook.Quit()