gpt4 book ai didi

powershell - 无法在Outlook中使用Powershell遍历电子邮件对象

转载 作者:行者123 更新时间:2023-12-02 23:40:37 25 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本将Outlook文件夹作为输入,并将所有未读邮件移动到其他文件夹。我的代码:

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

$myFolder = $namespace.pickfolder()

$toFolder = $inbox.Folders | where-object { $_.name -eq "UnreadMessages" }
$messages = $myFolder.Items
$messageCount = $messages.count

for ($i = $messageCount - 1; $i -ge 0; $i--)
{
if ($messages[$i].unread -eq $True)
{
$message.move($toFolder)
}
}

问题是,我无法遍历“消息”对象。错误:
无法索引到 System.__ComObject类型的对象。

如果不可能,那我应该怎么做呢?
提前致谢。

编辑。这是我使用powershell的第一天:)

最佳答案

虽然无法使用PowerShell的常规索引语法-$messages[$i]-
要访问$messages的元素,可以在文件夹对象上使用.Items($i) (请参阅the docs):

另外,如Dmitry Streblechenko's helpful answer中所述,索引从1而不是0开始:

for ($i = $myFolder.Items.Count; $i -ge 1; $i--) 
{
$message = $myFolder.Items($i)
if ($message.unread)
{
$message.move($toFolder)
}
}

对于不带索引
的简单 前向枚举,您可以使用foreach 进行 :
foreach ($message in $myFolder.Items) {
if ($message.unread)
{
$message.move($toFolder)
}
}

($myFolder.Items | ForEach-Object { ... }也应该起作用,但是会慢一些。)

就是说,Dmitry's answer答案还指出了如何在源头执行经过过滤的枚举,该枚举的性能要好得多。

关于powershell - 无法在Outlook中使用Powershell遍历电子邮件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43739122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com