2015-02-23 87 views
1

我想做一个迭代,它会自动删除Outlook中的所有联系人。Powershell迭代删除联系人

这第一排将集合:

$olSession = (New-Object -ComObject Outlook.Application).Session 
$olSession.Logon('Outlook') 
$contactsFolder = 10 
$elemek = $olSession.GetDefaultFolder($contactsFolder).Items 

我可以删除一个项目,如果我知道这个名字:

$deleteone = $elemek | Where-Object {$_.FullName -eq "Your Name"} 
$deleteone.Delete() 

但我想自动删除所有联系人,所以我得到$elemek中的元素数与$elemek.Count

我不知道如何获取数组“动态”的价值:

for ($i=0; $i -le $elemek.Count; $i++) 
{ 
    # The following line is not working 
    $elemek.Count[0].Delete() 
} 

你能帮我解决迭代?

谢谢。

增加:

如果我运行此:

$elemek | Format-Table FullName,MobileTelephoneNumber,Email1Address 

我得到这个:

FullName  MobileTelephoneNumber  Email1Address 
--------  ---------------------  ------------- 
Morgan Freeman       /o=Mydomain/ou=Exchange Administrativ...        
Johny English        /o=Mydomain/ou=Exchange Administrativ... 

所以我真的需要从$ elemek和使用了全名在演示文稿的脚本块中。

+0

' $ elemek |%{$ _。delete()}'。 %是foreach的别名 – 2015-02-23 07:01:11

+0

我用foreach尝试过,但foreach出错,因为每次运行脚本时只有一半的联系人被删除。再次运行...再次一半...只有一半... – holian 2015-02-23 07:31:58

+0

对不起,但我不知道如何... for($ i = 0; $ i -le $ elemek.Count; $ i ++){$ elemek | %{$ _。delete()}} 使用“0”参数调用“Delete”异常:“操作失败。” – holian 2015-02-23 07:36:02

回答

1

只需使用ForEach-Object,但$elemek预读内容在删除前:

@($elemek)|ForEach-Object {$_.Delete()} 
+0

谢谢。它似乎我们完成了。 – holian 2015-02-23 11:31:27

+0

“有时”脚本在结束之前停止。任何想法是什么问题,如何调查是什么原因造成的? – holian 2015-03-06 08:01:03

+0

@holian它是否会产生任何错误/警告?脚本中的下一个语句是否执行? – PetSerAl 2015-03-07 14:50:39

0

异常可以提出,如果$ elemk包含空值,试试这个: ...

$ErrorActionPreference="stop" 
$elemek = $olSession.GetDefaultFolder($contactsFolder).Items 
try{ 

    $elemk |%{ if ($_) { $_.delete() } } 
} 
catch{ 
"error occured :" 
$_ 
} 
+0

它提出了你所做的......但它的工作作为foreach ...如果我有10个联系人并运行此比5个联系人左...我不明白为什么一半...为什么不删除所有的联系人。 – holian 2015-02-23 08:55:00

+0

尝试捕捉错误,看我的更新 – 2015-02-23 09:01:50

+0

脚本停在最后一个“}” – holian 2015-02-23 09:09:36