PowerShell Outlook高级搜索完成事件

时间:2019-02-07 13:21:12

标签: powershell outlook advanced-search

在PowerShell脚本中,我想对Windows本地邮件进行一些研究。

我有以下脚本:

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null

$outlook = New-Object -com Outlook.Application;

$namespace = $outlook.GetNamespace("MAPI");

Function Get-OutlookInbox {

    $accountsList = $namespace.Folders

    $query = "Test"
    $filter = "urn:schemas:httpmail:subject LIKE '"+$query+"'"

    foreach($account in $accountsList) {
        write-host "SEARCHING IN MAILBOX : " $account.name

        $scope = $account.FolderPath

        $search = $outlook.AdvancedSearch("'$scope'", $filter, $True)

        Start-Sleep -Seconds 10

        foreach ($result in $search.Results) {
            $result.Subject
            $result.ReceivedTime
            $result.SenderName
        }

    }

$inbox = Get-OutlookInbox

$inbox

由于Start-Sleep -Seconds 10函数是异步的,因此使用$outlook.AdvancedSearch可以很好地工作,我不太喜欢这种开发方式,有点cr脚。

我想使用AdvancedSearchComplete事件,但是我不知道如何在PowerShell中使用它,该文档适用于VBA。我不是很擅长PowerShell开发,我找不到解决方法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我终于找到了自己的解决方案,将其发布在下面,可能对将来的某个人有用:

我使用PowerShell Register-ObjectEvent订阅了AdvancedSearchComplete事件

查看我更新的脚本:

=Mult_Lookup_and_Sum(worksheets("Input Variable").range("f5"),worksheets("Ref Data").range("B:C"),2)