2016-09-14 100 views
2

我在PS 4中编写了一个脚本,用于读取Outlook文件夹的内容,查找未读电子邮件,处理它们,然后将它们移动到另一个文件夹中。这个脚本很好用,直到PS 5被推送到我的工作站。现在,我得到以下错误:访问PowerShell中的Outlook文件夹5

Error while invoking [PROPERTYGET, DISPID(0)]. Could not find member. 
At U:\Powershell\Scripts\Outlook - Process Emails.ps1:214 char:7 
+  $($folger.Items)[$i].Subject 
+  ~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : OperationStopped: (:) [], MissingMemberException 
    + FullyQualifiedErrorId : System.MissingMemberException 

这里是代码的主要块:

Add-Type -assembly "Microsoft.Office.Interop.Outlook" 
$Outlook = New-Object -ComObject Outlook.Application 
$NameSpace = $Outlook.GetNameSpace("MAPI") 

$folder = $NameSpace.Folders.Item("Scans").Folders.Item("Results") 

for ($i = ($folder.Items.Count - 1); $i -ge 0; $i--) 
{ 
    if ($($folder.Items)[$i].UnRead) # It breaks on this line 
    { 
     # Do stuff 
    } 
} 

两个问题:

1)PS 4和PS 5之间是什么改变导致此?没有什么可以在PS 5的发行说明中跳出来。

2)我能做些什么来使我的脚本恢复运行而无需运行?

回答

3

想通了我自己......

if ($($folder.Items)[$i].UnRead) 

改为

if ($folder.Items[$i].UnRead) 

我为什么需要额外的$和括号从来不敢肯定,但它在原来的版本工作得我从来没有搞错过它。

+1

这很有趣。我不知道v4和v5之间会有什么变化来改变它,但我认为原始版本一直是错误的。可能是一个已修复的错误? – briantist

+0

我最近在Outlook中看到过类似的东西,但我使用了select -index来解决这个问题。 –

+0

@briantist,我模仿我的原代码关闭的这段代码发现SO: http://stackoverflow.com/a/24829429/6679564 这里TheMadTechnician使用一组额外的$和括号,但我从来没有一定的为什么。 – Tchotchke