2015-02-23 89 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