瞭解匯入和匯出 Exchange 管理命令介面中的檔案

 

適用版本: Exchange Server 2010 SP2, Exchange Server 2010 SP3

上次修改主題的時間: 2015-03-09

Microsoft Exchange Server 2010 會從您管理 Windows 的工作站與執行您管理之 Exchange 的伺服器,於遠端使用 Exchange 2010 PowerShell 命令列介面來建立伺服器與工作站之間的連線。在 Exchange 2010 中,這稱為 Exchange 管理命令介面,或遠端命令介面。即使您是管理本機 Exchange 2010 伺服器,還是會透過遠端命令介面來進行連線。如需本機和遠端命令介面的詳細資訊,請參閱 Exchange 管理命令介面概觀

由於遠端命令介面的實作之故,從 Exchange 伺服器匯入與匯出檔案的方式,在 Exchange 2010 中已經有所改變。本主題討論為何需要此新的處理程序,以及如何在本機伺服器或工作站,以及遠端 Exchange 2010 伺服器之間匯入與匯出檔案。

Windows PowerShell 工作階段

為了了解在遠端命令介面中為何需要特殊語法來匯入與匯出,您需要了解 Exchange 2010 中的命令介面實作方式。此命令介面會使用 Windows PowerShell 工作階段等環境,讓各種變數、指令程式等項目共用資訊。每次當您開啟新的命令介面視窗時,就會建立新的工作階段。每個視窗中執行的指令程式,可以存取儲存在該視窗中的變數與其他資訊,但是無法存取其他開啟的命令介面視窗中的變數。這是因為這些變數每個都包含在所屬的 Windows PowerShell 工作階段中。Windows PowerShell 工作階段可以也被稱為 runspace。

Exchange 2010 中的遠端命令介面具有兩個工作階段 (本機工作階段與遠端工作階段)。本機工作階段即為正在本機電腦上執行的 Windows PowerShell 工作階段。此工作階段包含 Windows PowerShell 隨附的所有指令程式。它也能夠存取您的本機檔案系統。

遠端工作階段即為正在遠端 Windows 伺服器上執行的 Exchange PowerShell 工作階段。此工作階段是所有 Exchange 指令程式執行的位置。它能存取 Exchange 伺服器的檔案系統。

當您連線至遠端 Exchange 伺服器時,會在您的本機工作階段與 Exchange 伺服器上的遠端工作階段之間建立連線。此連線可讓您在本機工作階段中,於遠端 Exchange 伺服器執行 Exchange 指令程式,即使您的本機電腦並未安裝任何 Exchange 指令程式也沒關係。

重要

即使您在 Exchange 2010 伺服器上開啟命令介面,還是會進行相同的連線,並建立以上兩個工作階段。也就是說,不管您是在 Exchange 2010 伺服器還是遠端用戶端工作站上開啟命令介面,都必須使用相同的全新語法來匯入與匯出檔案。

在遠端工作階段中,於遠端 Exchange 伺服器上執行的 Exchange 指令程式,無法存取您的本機檔案系統。也就是說,您無法單純使用 Exchange 指令程式,從本機檔案系統中匯入與匯出檔案。您需要使用其他語法以便在本機檔案系統中傳輸檔案,這樣一來,在遠端 Exchange 伺服器上執行的 Exchange 指令程式就能使用這些資料。如需所需語法的詳細資訊,請參閱本主題稍後的「在遠端命令介面中匯入與匯出檔案」一節。

注意

在邊際傳輸伺服器匯入與匯出檔案,不需要任何特殊語法。如需 Edge Transport server role 的詳細資訊,請參閱本主題稍後的「在邊際傳輸伺服器上匯入與匯出檔案」一節。

在遠端命令介面中匯入與匯出檔案

Mailbox、Hub Transport、Unified Messaging 與 Exchange 2010 中的 Client Access server role,都會應用到遠端命令介面。由於這些項目都會使用遠端命令介面,因此在匯入與匯出檔案時就需要特殊語法。Edge Transport server role 會使用本機命令介面與不同的語法。如需 Edge Transport server role 的詳細資訊,請參閱本主題稍後的「在邊際傳輸伺服器上匯入與匯出檔案」一節。

在遠端命令介面中匯入檔案

任何時候當您想要從本機電腦或伺服器,將檔案傳送至 Exchange 2010 伺服器上執行的 Cmdlet 時,可以使用在 Exchange 2010 中匯入檔案的語法。可從本機電腦上接受檔案中資料的指令程式,會使用名為 FileData (或類似名稱) 的參數。若要判斷要使用的正確參數,請參閱 [說明] 中有關您所使用的指令程式資訊。

命令介面必須知道您想要傳送至 Exchange 2010 指令程式的檔案是哪一個,以及哪個參數將接受資料。若要這樣做,請使用下列語法。

<Cmdlet> -FileData ([Byte[]]$(Get-Content -Path <local path to file> -Encoding Byte -ReadCount 0))

例如,下列命令會將 C:\MyData.dat 檔案匯入 Import-SomeData 虛構指令程式上的 FileData 參數。

Import-SomeData -FileData (Byte[]]$(Get-Content -Path "C:\MyData.dat" -Encoding Byte -ReadCount 0))

執行此命令後,就會發生下列動作:

  1. 遠端命令介面會接受此命令。

  2. 遠端命令介面會評估命令,並判斷提供給 FileData 參數的值中,會內嵌一個命令。

  3. 遠端命令介面會停止評估 Import-SomeData 命令並執行 Get-Content 命令。Get-Content 命令會從 MyData.dat 檔案中讀取資料。

  4. 遠端命令介面會將來自 Get-Content 命令的資料當成 Byte[] 物件儲存起來,以便傳遞至 Import-SomeData Cmdlet。

  5. Import-SomeData 命令恢復執行。遠端命令介面會將執行 Import-SomeData 指令程式的要求,連同 Get-Content 指令程式所建立的物件,一併傳送給遠端 Exchange 2010 伺服器。

  6. 在遠端 Exchange 2010 伺服器上,會執行 Import-SomeData 指令程式,並將儲存在由 Get-Content 指令程式所建立的暫存物件中的資料傳送至 FileData 參數。Import-SomeData 指令程式會處理輸入,並執行任何所需的動作。

某些指令程式會使用下列替代語法,來完成與上述語法相同的事項。

[Byte[]]$Data = Get-Content -Path <local path to file> -Encoding Byte -ReadCount 0
Import-SomeData -FileData $Data

這個替代語法會產生相同的處理程序。唯一的差別在於,後者不會一次執行完整個作業,而是將從本機檔案擷取的資料,儲存在建立以供參考的變數中。然後在匯入命令中使用這個變數,將本機檔案的內容傳送至 Import-SomeData Cmdlet。當您想要在一個以上的命令中使用來自本機檔案的資料時,以上兩個步驟的處理程序就會很有用。

匯入檔案時,您必須考慮到相關限制。如需詳細資訊,請參閱本主題稍後的<匯入檔案的限制>。

如需如何將資料匯入 Exchange 2010 的特定資訊,請參閱 [說明] 中有關您所管理的功能資訊。

匯入檔案的限制

在遠端命令介面中匯入資料時必須設定相關限制,以便保有傳輸的資料完整性。如果傳輸中的資料遭到中斷,將無法恢復傳輸。同時,由於傳輸中的資料會儲存在遠端伺服器的記憶體中,該伺服器必須防範因超大量資料流入所導致的記憶體耗盡情況。

基於以上原因,我們必須針對從本機電腦傳輸至遠端 Exchange 2010 伺服器的資料量設定以下限制:

  • 每個執行的指令程式的資料量大小,會限定在 500 MB

  • 每個傳送至指令程式的物件大小,會限定在 75 MB

一旦超出以上任何一項限制,就會停止執行該指令程式與相關管線,並顯示錯誤。請參閱下表中的範例,了解這些限制的運作方式。

匯入資料限制範例

物件數目 物件大小 (MB) 總大小 (MB) 作業結果

10

40

400

由於個別物件並未超過 75 MB,傳送至指令程式的總資料量也沒有超出 500 MB,因此作業順利完成。

5

80

400

儘管傳送至指令程式的總資料量只有 400 MB,但是個別物件的大小卻超出了 75 MB 的限制,因此作業失敗。

120

5

600

儘管個別物件的大小只有 5 MB,但是傳送至指令程式的總資料量卻超出了 500 MB 的限制,因此作業失敗。

由於遠端 Exchange 2010 伺服器與本機電腦之間所能傳輸的資料量有大小限制,並非所有一度支援匯入資料的指令程式,都能夠繼續支援這種資料傳輸方式。若要判斷特定指令程式是否支援此方式,請參閱 [說明] 中的特定指令程式資訊。

這些限制應該能夠滿足 Exchange 2010 伺服器上所執行的大多數典型操作案例。如果將這些限制的上限降低一些,您會發現某些原本正常的操作會因為超出新的限制而失敗。如果將這些限制上限提高一些,傳輸的資料需要較久的傳輸時間,而變得更容易受到可能中斷資料傳輸的暫時性情況影響。此外,如果您沒有安裝足夠的記憶體,讓伺服器得以在傳輸期間儲存整個資料區塊的話,可能會耗盡遠端伺服器上的所有記憶體。每一種可能發生情況都會導致資料遺失,因此建議您不要變更預設限制。

在遠端命令介面中匯出檔案

任何時候當您想要接受來自遠端 Exchange 2010 伺服器上執行之指令程式的資料,並將該資料儲存在本機電腦或伺服器時,可以使用 Exchange 2010 中的語法來匯出檔案。能夠提供資料讓您儲存至本機檔案的指令程式,將會輸出包含 FileData 屬性 (或類似屬性) 的物件。依據指令程式而定,FileData 屬性只會填入在特定情況中輸出的物件中。若要判斷要使用的正確屬性以及使用時機,請參閱 [說明] 中有關您所使用的指令程式資訊。

命令介面必須知道您想要將儲存在 FileData 屬性中的資料,儲存至本機電腦中。若要這樣做,請使用下列語法。

<cmdlet> | ForEach { $_.FileData | Add-Content <local path to file> -Encoding Byte }

例如,下列命令會將儲存在 FileData 屬性 (位於 Export-SomeData 虛擬指令程式所建立的物件上) 的資料匯出。匯出的資料會儲存在您在本機電腦上指定的檔案中,在本案例中為 MyData.dat。

注意

此程序會使用 ForEach 指令程式、物件及管線。如需每項的詳細資訊,請參閱:
管線
結構化的資料

Export-SomeData | ForEach { $_.FileData | Add-Content C:\MyData.dat -Encoding Byte }

執行此命令後,就會發生下列動作:

  1. 遠端命令介面會接受此命令。

  2. 遠端命令介面會呼叫遠端 Exchange 2010 伺服器上的 Export-SomeData Cmdlet。

  3. Export-SomeData 指令程式所建立的輸出物件,會透過管線傳回至本機命令介面工作階段。

  4. 然後透過管線將輸出物件傳至內含指令碼區塊的 ForEach Cmdlet。

  5. 在此指令碼區塊中,可以存取到管線中目前物件上的 FileData 屬性。包含在 FileData 屬性中的資料,會透過管線傳送至 Add-Content Cmdlet。

  6. Add-Content 指令程式會將從 FileData 屬性透過管線傳送至 MyData.dat 檔案的資料,儲存在本機檔案系統上。

如需如何從 Exchange 2010 匯入資料的特定資訊,請參閱 [說明] 主題中有關您所管理的功能資訊。

匯入和匯出邊緣傳輸伺服器上的檔案

與其他 Exchange 2010 server role 不同的是,Edge Transport server role 並不會使用遠端命令介面。它會使用本機命令介面。這是因為遠端命命介面需要 Active Directory 與應用角色的存取控制 (RBAC) 一起運作。Edge Transport server role 使用 Active Directory 輕量型目錄服務 (AD LDS)。

由於 Edge Transport server role 並不使用遠端命令介面,因此用來匯入與匯出檔案的全新處理程序並不適用。在 Edge Transport server role 上執行的指令程式,無須透過其他任何語法即可直接接受檔案。如需在邊際傳輸伺服器上匯入與匯出檔案所需的語法,請參閱 [說明] 中有關您所使用的指令程式資訊。