在尝试解决这一问题时遇到了一些问题。由于某种原因,我的脚本无法正常工作。
它应将收件箱文件夹中的所有邮件标记为已读,然后将其删除。但是,当脚本运行时,它只会删除.count $ emails显示的一半...
如何解决这个问题,我是在做错什么吗?
$outlook = new-object -comobject outlook.application
#Define folders
$namespace = $outlook.GetNameSpace("MAPI")
$pst = $namespace.Stores
$pstRoot = $pst.GetRootFolder()
$pstFolders = $pstRoot.Folders
#$personal = $pstFolders.Items("ARCHIVE") ##Not working, sadly.
$DefaultFolder = $namespace.GetDefaultFolder(6)
$InboxFolders = $DefaultFolder.Folders
$DeletedItems = $namespace.GetDefaultFolder(3)
$Emails = $DefaultFolder.Items
Foreach ($Email in $Emails) {
#Define folders
$Email.UnRead = $false
$Email.Move($DeletedItems) | out-null
continue
}
我建议使用MailItem.Delete()方法,而不是将其移动到Deleted Items文件夹中。在Delete()方法页面上:
该删除方法集合中删除单个项目。要删除文件夹“项目”集合中的所有项目,必须删除每个项目(从文件夹中的最后一个项目开始)。例如,在文件夹AllItems的项目集合中,如果该文件夹中有n个项目,则开始在AllItems.Item(n)处删除该项目,并每次都减小索引,直到删除AllItems.Item(1)。。
该删除方法从包含文件夹移动项目到已删除项目文件夹。如果包含的文件夹是“已删除邮件”文件夹,则Delete方法将永久删除该项目。
有了这些知识,我建议用以下内容替换您的ForEach循环:
For($i=($emails.count-1);$i -ge 0;$i--){
$($emails)[$i].Unread = $false
$($emails)[$i].delete()
}
我不明白为什么要对集合进行子表达式以进行枚举,但是如果不这样做,我将永远无法指定记录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句