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

適用於:Exchange Server 2013

Microsoft Exchange Server 2013 使用Windows PowerShell命令列介面遠端處理,在您要管理 Exchange 的伺服器或工作站與執行您所管理 Exchange 2013 的伺服器之間建立連線。 在 Exchange 2013 中,這稱為遠端 Exchange 管理命令介面或遠端殼層。 即使您管理的是本機 Exchange 2013 伺服器,也會使用遠端殼層進行連線。 如需本機和遠端殼層的詳細資訊,請 參閱使用 PowerShell 搭配 Exchange 2013 (Exchange 管理命令介面)

在 Exchange 2013 中匯入和匯出檔案的方式,與您在 2007 Exchange Server執行此作業的方式不同。 這是因為在 Exchange 2013 中使用遠端殼層。 本主題討論為何需要此新程式,以及如何在本機伺服器或工作站與 Exchange 2013 伺服器之間匯入和匯出檔案。

Windows PowerShell會話

若要瞭解為何您需要特殊語法來匯入和匯出遠端殼層中的檔案,您必須知道如何在 Exchange 2013 中實作 Shell。 Shell 會使用Windows PowerShell會話,也就是變數、Cmdlet 等等可以共用資訊的環境。 每次開啟新的 Shell 視窗時,您都會建立新的會話。 在每個視窗中執行的 Cmdlet 可以存取變數和儲存在該視窗中的其他資訊,但無法存取其他開啟殼層視窗中的變數。 這是因為它們各自包含在自己的Windows PowerShell會話中。 Windows PowerShell會話也可以稱為 Runspace。

Exchange 2013 中的遠端殼層有兩個會話:本機會話和遠端會話。 本機會話是在本機電腦上執行的Windows PowerShell會話。 此會話包含隨附于 Windows PowerShell 的所有 Cmdlet。 它也可以存取您的本機檔案系統。

遠端會話是在遠端 Exchange 伺服器上執行的Windows PowerShell會話。 此會話是執行所有 Exchange Cmdlet 的位置。 它可以存取 Exchange Server 的檔案系統。

當您連線到遠端 Exchange 伺服器時,會在您電腦上的本機會話與 Exchange Server 上的遠端會話之間建立連線。 此連線可讓您在本機會話的遠端 Exchange 伺服器上執行 Exchange Cmdlet,即使您的本機電腦未安裝任何 Exchange Cmdlet 也一致。 雖然 Exchange Cmdlet 似乎正在本機電腦上執行,但它們實際上是在 Exchange 伺服器上執行。

重要事項

即使您在 Exchange 2013 伺服器上開啟殼層,也會發生相同的連線程式,並建立兩個會話。 這表示,無論您是在 Exchange 2013 伺服器或遠端用戶端工作站上開啟 Shell,都必須使用相同的新語法來匯入和匯出檔案。

在遠端 Exchange 伺服器的遠端會話中執行的 Exchange Cmdlet 無法存取您的本機檔案系統。 這表示您無法自行使用 Exchange Cmdlet,從本機檔案系統匯入或匯出檔案。 您必須使用其他語法,將檔案傳送至本機檔案系統,以及從本機檔案系統傳送檔案,以便在遠端 Exchange 伺服器上執行的 Exchange Cmdlet 可以使用資料。 如需必要語法的詳細資訊,請參閱本主題稍後的。

在遠端殼層中匯入和匯出檔案

匯入和匯出檔案需要特定語法,因為信箱和用戶端存取伺服器使用遠端殼層,而且無法存取本機電腦的檔案系統。

在遠端殼層中匯入檔案

每當您想要從本機電腦或伺服器將檔案傳送至 Exchange 2013 伺服器上執行的 Cmdlet 時,就會使用在 Exchange 2013 中匯入檔案的語法。 接受本機電腦上檔案資料的 Cmdlet 會有稱為 FileData (或類似) 的參數。 若要判斷要使用的正確參數,請參閱您所使用 Cmdlet 的說明資訊。

Shell 必須知道您想要傳送至 Exchange 2013 Cmdlet 的檔案,以及哪些參數會接受資料。 若要這樣做,請使用下列語法。

<Cmdlet> -FileData ([System.IO.File]::ReadAllBytes('<local path to file>'))

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

Import-SomeData -FileData ([System.IO.File]::ReadAllBytes('C:\MyData.dat'))

下列動作會在命令執行時發生:

  1. 遠端殼層會接受命令。

  2. 遠端殼層會評估命令,並判斷在提供給 FileData 參數的值中有內嵌命令。

  3. 遠端殼層會停止評估 Import-SomeData 命令,並執行 [System.IO.File]::ReadAllBytes 命令。 命令會從 MyData.dat 檔案讀取資料。

  4. 遠端殼層會暫時將 [System.IO.File]::ReadAllBytes 命令中的資料儲存為 Byte[] 物件,以便將它傳遞至 Import-SomeData Cmdlet。

  5. Import-SomeData命令的執行會繼續。 遠端殼層會將執行 Import-SomeData Cmdlet 的要求,連同 [System.IO.File]::ReadAllBytes 命令所建立的物件一起傳送至遠端 Exchange 2013 伺服器。

  6. 在遠端 Exchange 2013 伺服器上,會執行 Import-SomeData Cmdlet,並將 儲存在 [System.IO.File]::ReadAllBytes 命令所建立之暫存物件中的資料傳遞至 FileData 參數。 Import-SomeData Cmdlet 會處理輸入,並執行任何必要的動作。

或者,使用下列替代語法來完成與前述語法相同的動作。

$Data = [System.IO.File]::ReadAllBytes('<local path to file>')
Import-SomeData -FileData $Data

此替代語法也會發生相同的程式。 唯一的差異是,從本機檔案擷取的資料會儲存在建立之後可參考的變數中,而不是一次執行整個作業。 然後,匯入命令中會使用 變數,將本機檔案的內容傳遞至 Import-SomeData Cmdlet。 當您想要在多個命令中使用本機檔案中的資料時,使用這個雙步驟程式會很有用。

匯入檔案時必須考慮一些限制。 如需詳細資訊,請參閱本主題稍後的。

如需如何將資料匯入 Exchange 2013 的特定資訊,請參閱您所管理功能的說明主題。

匯入檔案的限制

在遠端殼層中匯入資料時必須設定限制,以保留要傳輸之資料的完整性。 進行中的傳輸如果中斷,就無法繼續。 此外,因為傳輸的資料會儲存在遠端伺服器的記憶體中,所以伺服器必須受到保護,避免因大量資料而導致的記憶體耗盡。

基於這些原因,從本機電腦或伺服器傳輸到遠端 Exchange 2013 伺服器的資料量受限於下列各項:

  • 針對每個執行的 Cmdlet (MB) 500 MB

  • 每個傳遞至 Cmdlet 的物件 75 MB

如果您超過其中一個限制,Cmdlet 及其相關聯管線的執行將會停止,而且您會收到錯誤。 請考慮下表中的範例,以瞭解這些限制的運作方式。

匯入資料限制範例

物件數目 物件大小 (MB) 總大小 (MB) 作業結果
10 40 400 作業成功,因為個別物件的大小未超過 75 MB,也未超過傳遞至 Cmdlet 的資料總量超過 500 MB。
5 80 400 作業失敗,因為雖然傳遞至 Cmdlet 的資料總量只有 400 MB,但每個個別物件的大小超過 75 MB 的限制。
120 5 600 作業失敗,因為雖然每個個別物件只有 5 MB,但傳遞至 Cmdlet 的資料總量超過 500 MB 的限制。

由於在遠端 Exchange 2013 伺服器與本機電腦之間可傳輸的資料量已設定大小限制,因此並非所有一旦支援匯入的 Cmdlet 都支援此資料傳輸方法。 若要判斷特定 Cmdlet 是否支援這個方法,請參閱特定 Cmdlet 的說明資訊。

這些限制應能容納大部分可在 Exchange 2013 伺服器上執行的一般作業。 如果限制降低,您可能會發現某些一般作業因為超過新限制而失敗。 如果提高限制,則傳輸的資料可能需要較長的時間才能傳輸,並因暫時性狀況而造成資料傳輸中斷的風險更大。 此外,如果您尚未安裝足夠的記憶體來允許伺服器在傳輸期間儲存整個資料區塊,則可能會耗盡遠端伺服器上的記憶體。 每個可能性都可能導致資料遺失,因此建議您不要變更預設限制。

在遠端殼層中匯出檔案

每當您想要接受遠端 Exchange 2013 伺服器上執行之 Cmdlet 的資料,並將資料儲存在本機電腦或伺服器上時,就會使用在 Exchange 2013 中匯出檔案的語法。 提供可儲存至本機檔案之資料的 Cmdlet 會輸出物件,其中包含 FileData 屬性 (或類似) 。 根據 Cmdlet, FileData 屬性只會填入在特定情況下輸出的物件上。 若要判斷要使用的正確屬性以及何時可以使用,請參閱您所使用 Cmdlet 的說明資訊。

殼層必須知道您想要將 FileData 屬性中儲存的資料儲存到本機電腦。 若要這樣做,請使用下列語法。

$Variable = <cmdlet>
[System.IO.File]::WriteAllBytes('<local path to file>', $Variable.FileData)

例如,下列命令會匯出Export-SomeData虛構 Cmdlet 所建立之物件上FileData屬性中儲存的資料。 匯出的資料會儲存在您在本機電腦上指定的檔案中,在此案例中為 MyData.dat。

$Data = Export-SomeData
[System.IO.File]::WriteAllBytes('C:\MyData.dat', $Data.FileData)

下列動作會在命令執行時發生:

  1. 遠端殼層會接受命令。

  2. 遠端殼層會呼叫遠端 Exchange 2013 伺服器上的 Export-SomeData Cmdlet,並將結果儲存在本機$Data變數中。

  3. [System.IO.File]::WriteAllBytes命令會讀取FileData屬性中包含的資料。

  4. [System.IO.File]::WriteAllBytes命令會將FileData屬性中的資料儲存到本機檔案系統上的 MyData.dat 檔案。

如需如何從 Exchange 2013 匯出資料的特定資訊,請參閱您所管理功能的說明主題。