2016-04-06 8 views
0

Ich habe versucht, die Junk-E-Mail auf diese Weise zu leeren. Es kennzeichnet nur die gelesenen E-Mails, aber nicht den Ordner.PowerShell - Leere Junk-E-Mail

Add-Type -assembly "Microsoft.Office.Interop.Outlook" 
$Outlook = New-Object -comobject Outlook.Application 
$namespace = $Outlook.GetNameSpace("MAPI") 
$junk = $namespace.GetDefaultFolder(23) 
$junk.Items | %{$_.Unread = $false} | %{$_.Delete()} 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Outlook) 
Remove-Variable Outlook 

verwendete ich Exchange Web Services früher und ich konnte aber der Code ist nicht elegant:

$junk.Empty([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete, $true) 

EDIT:

ich mit diesem

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

teilweise löschen können Damit meine ich, dass die E-Mails nur zu einem bestimmten Zeitpunkt gelöscht werden und dann in die gelöschten Objekte verschoben werden. Ich wünschte, sie wären einfach leer.

Antwort

0

Verwenden Sie nicht „für jede“ Schleife, wenn Sie die Sammlung ändern sich - Schleife von Items.Count bis 1.

+0

Ich ziehe nicht die foreach zu verwenden. – skrubber

+0

Ist es nicht das, was Sie oben verwenden? –

+0

Tut mir leid, wenn ich verwirrt habe. Ich möchte, dass der erste Teil meiner Frage funktioniert: 'Add-Type -assembly" Microsoft.Office.Interop.Outlook " $ Outlook = Neu-Objekt -comobject Outlook.Application $ namespace = $ Outlook.GetNameSpace (" MAPI ") $ junk = $ namespace.GetDefaultFolder (23) $ junk.Items | % {$ _. Ungelesen = $ false} | % {$ _. Delete()} [System.Runtime.Interopservices.Marshal] :: ReleaseComObject ($ Outlook) Remove-Variable Outlook' – skrubber