Powershell迭代删除联系人

时间:2015-02-23 06:53:35

标签: .net powershell iteration powershell-v2.0

我想进行一次迭代,自动删除Outlook中的所有联系人。

第一行产生集合:

$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获取FullName并使用for itaration的脚本块。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果$ elemk包含空值,则可能引发异常,请尝试以下操作: ...

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

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