【发布时间】:2015-03-05 14:53:22
【问题描述】:
我正在尝试将 Outlook 中的电子邮件从一个文件夹移动到另一个文件夹。
但是,我的代码在处理最后一封电子邮件时抛出错误。
“无法索引到 System.__ComObject 类型的对象。”
它会将所有其他电子邮件移动到存档文件夹中。
如果仅存在 1 封电子邮件,则会出错.... 如果存在 2 封或更多封电子邮件,则它将移动除最后一封电子邮件之外的所有邮件,然后出错。
代码是
$filepath="Z:\"
$olFolderInbox = 6
$i=0
$outlook = new-object -com outlook.application;
$ns = $outlook.GetNameSpace("MAPI");
$inbox = $ns.Folders | ? { $_.Name -eq '#Whe ContractorRFPs' };
$trgtfldr = $inbox.Folders | ? { $_.Name -match 'Inbox' };
$mvdfldr = $inbox.Folders | ? { $_.Name -match 'Archived' };
$messages = $trgtfldr.items
for($i=($messages.count -1);$i -gt -1;$i--){
$($messages)[$i].move($mvdfldr)
}
【问题讨论】:
-
数组的索引是从 0 而不是 1。如果你改变你的逻辑来匹配它是否有效?
for ($i=0; $i -le $intCount; $i++) -
出于同样的原因,您的第二个循环也可能需要进行类似的更改
-
不起作用...将数组更改为 0 会破坏我的附件剥离(正常工作),产生的错误是使用“1”参数调用“项目”的异常:“数组索引超出范围。”
-
好的...没有测试我会再试一次。您在子表达式中有
$messages不是必需的。$($messages)[$i].move($mvdfldr)难道不只是$messages[$i].move($mvdfldr) -
删除括号会导致循环中的所有电子邮件都不会被移动。
标签: email powershell