我想进行一次迭代,自动删除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的脚本块。
答案 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 :"
$_
}