0

我需要從各個郵箱的Outlook中檢索電子郵件項目。 我發現下面的腳本,適用於我的收件箱。但是,我如何在腳本中定義其他郵箱名稱。 我有很多郵箱,每個小時我需要從郵箱中檢索項目,因此尋找自動化,這有助於節省工作。通過PowerShell從郵箱獲取電子郵件項目

Function Get-OutlookInBox 
{ 
    <# 
    .Synopsis 
    This function returns InBox items from default Outlook profile 
    .Description 
    This function returns InBox items from default Outlook profile. It 
    uses the Outlook interop assembly to use the olFolderInBox enumeration. 
    It creates a custom object consisting of Subject, ReceivedTime, Importance, 
    SenderName for each InBox item. 
    *** Important *** depending on the size of your InBox items this function 
    may take several minutes to gather your InBox items. If you anticipate 
    doing multiple analysis of the data, you should consider storing the 
    results into a variable, and using that. 
    .Example 
    Get-OutlookInbox | 
    where { $_.ReceivedTime -gt [datetime]"5/5/11" -AND $_.ReceivedTime -lt ` 
    [datetime]"5/10/11" } | sort importance 
    Displays Subject, ReceivedTime, Importance, SenderName for all InBox items that 
    are in InBox between 5/5/11 and 5/10/11 and sorts by importance of the email. 
    .Example 
    Get-OutlookInbox | Group-Object -Property SenderName | sort-Object Count 
    Displays Count, SenderName and grouping information for all InBox items. The most 
    frequently used contacts appear at bottom of list. 
    .Example 
    $InBox = Get-OutlookInbox 
    Stores Outlook InBox items into the $InBox variable for further 
    "offline" processing. 
    .Example 
    ($InBox | Measure-Object).count 
    Displays the number of messages in InBox Items 
    .Example 
    $InBox | where { $_.subject -match '2011 Scripting Games' } | 
    sort ReceivedTime -Descending | select subject, ReceivedTime -last 5 
    Uses $InBox variable (previously created) and searches subject field 
    for the string '2011 Scripting Games' it then sorts by the date InBox. 
    This sort is descending which puts the oldest messages at bottom of list. 
    The Select-Object cmdlet is then used to choose only the subject and ReceivedTime 
    properties and then only the last five messages are displayed. These last 
    five messages are the five oldest messages that meet the string. 
    .Notes 
    NAME: Get-OutlookInbox 
    AUTHOR: ed wilson, msft 
    LASTEDIT: 05/13/2011 08:36:42 
    KEYWORDS: Microsoft Outlook, Office 
    HSG: HSG-05-26-2011 
    .Link 
    Http://www.ScriptingGuys.com/blog 
#Requires -Version 2.0 
#> 
Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null 
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type] 
$outlook = new-object -comobject outlook.application 
$namespace = $outlook.GetNameSpace("MAPI") 
$folder = $namespace.getDefaultFolder($olFolders::olFolderInBox) 
$folder.items | 
Select-Object -Property Subject, ReceivedTime, Importance, SenderName 
} #end function Get-OutlookInbox 
+0

假設您使用的是Exchange Server(或Office365):您應該嘗試將EWS API用於這些類型的任務。它支持模擬,並且它比Outlook COM Object更可靠。 Glen Scales在他的博客上寫了很多關於使用EWS的文章(http://gsexdev.blogspot.nl/) – bluuf

回答

1

你可以嘗試添加PARAM塊到你的腳本,以便您可以運行類似「GET-OutlookInbox -Mailbox」。這將是這個樣子:

param (
    [Parameter(Mandatory=$true, 
    ValueFromPipeline=$true, 
    Position=1)] 
    [string[]]$Mailbox=$env::USERNAME 
) 

所以剛剛打破它一點,參數的實際名稱爲「郵箱」,並將其設置爲返回運行該腳本當前用戶的默認值。您可以通過在運行該功能時指定一個覆蓋它。這也將接受來自管道的值,這意味着你可以有一個名爲「$ aliases」的字符串數組,然後像這樣運行它:$ aliases | Get-OutlookInbox

+0

感謝Joseph,我嘗試將Param添加到我的函數中,但它引發錯誤。 – Ruchi

+0

錯誤是? – Joseph

+0

我將它這樣的,我嘗試運行該腳本 功能獲取-OutlookInBox { 參數( [參數(強制性= $真實, \t \t ValueFromPipeline = $真實 位置= 1)] [字符串[ ]] $ Mailbox = $ env :: USERNAME ) Add-type -assembly「Microsoft.Office.Interop.Outlook」| out-null .................. – Ruchi