從另一個工作階段匯入命令,並將其儲存在 Windows PowerShell 模組中。

語法

Export-PSSession [-Session] <PSSession> [-OutputModule] <string> [[-CommandName] <string[]>] [[-FormatTypeName] <string[]>] [-AllowClobber] [-ArgumentList <Object[]>] [-CommandType {<Alias> | <Function> | <Filter> | <Cmdlet> | <ExternalScript> | <Application> | <Script> | <All>}] [-Encoding <string>] [-Force] [-Module <string[]>] [<CommonParameters>]

描述

Export-PSSession Cmdlet 會從本機或遠端電腦上的另一個 PSSession 取得 Cmdlet、函數、別名和其他命令類型,並將它們儲存到 Windows PowerShell 模組中。若要將此模組中的命令加入至目前的工作階段,請使用 Import-Module Cmdlet。

不像 Import-PSSession 從另一個 PSSession 將命令匯入目前工作階段,Export-PSSession 會將命令儲存到模組中,而不會將命令匯入目前工作階段。

若要匯出命令,請先使用 New-PSSession Cmdlet 建立具有您所要匯出之命令的 PSSession,再使用 Export-PSSession Cmdlet 匯出命令。根據預設,Export-PSSession 除了已存在於目前工作階段中的命令以外,所有命令都會匯出,但是您可以用 CommandName 參數指定要匯出的命令。

Export-PSSession Cmdlet 會使用 Windows PowerShell 的隱含遠端功能。當您將命令匯入目前的工作階段時,這些命令就會以隱含方式執行於原始工作階段,或是執行於原始電腦的類似工作階段。

參數

-AllowClobber

匯出指定的命令,即使這些命令與目前工作階段中的命令同名亦然。

如果您匯入與目前工作階段中的命令同名的命令,則匯入的命令會隱藏或取代原始命令。如需詳細資訊,請參閱 about_Command_Precedence。

Export-PSSession 不會匯入與目前工作階段中的命令同名的命令。預設行為的設計目的是要防止命令名稱發生衝突。

必要?

false

位置?

named

預設值

False

接受管線輸入?

false

接受萬用字元?

false

-ArgumentList <Object[]>

匯出因使用指定的引數 (參數值) 所產生的命令變化。

例如,若要從 $s 的 PSSession 匯出憑證 (Cert:) 磁碟機中 Get-Item 命令的變化,請輸入"export-pssession -session $s -command Get-Item -argumentlist cert:"。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-CommandName <string[]>

只匯出有指定的名稱或名稱模式的命令。允許使用萬用字元。請使用 "CommandName" 或其別名 "Name"。

根據預設,Export-PSSession 會從 PSSession 匯出所有命令,但與目前工作階段中的命令同名的命令則除外。這樣可防止匯入的命令隱藏或取代目前工作階段中的命令。若要匯出所有命令,即使是隱藏或取代其他命令的那些命令,請使用 AllowClobber 參數。

如果您使用 CommandName 參數,則除非您使用 FormatTypeName 參數,否則不會匯出命令的格式化檔案。同樣地,如果您使用 FormatTypeName 參數,則除非您使用 CommandName 參數,否則不會匯出命令。

必要?

false

位置?

3

預設值

All commands in the session.

接受管線輸入?

false

接受萬用字元?

true

-CommandType <CommandTypes>

只匯出指定類型的命令物件。請使用 "CommandType" 或其別名 "Type"。

有效的值包括:

-- Alias:目前工作階段中的所有 Windows PowerShell 別名。

-- All:所有命令類型。它的作用相當於 "Get-Command *"。

-- Application:Path 環境變數 ($env:path) 所列出之路徑中所有非 Windows PowerShell 的檔案,包括 .txt、.exe 和 .dll 檔案。

-- Cmdlet:目前工作階段中的 Cmdlet。預設為 "Cmdlet"。

-- ExternalScript:Path 環境變數 ($env:path) 所列出之路徑中的所有 .ps1 檔案。

-- Filter 和 Function:所有 Windows PowerShell 函數。

-- Script:目前工作階段中的指令碼區塊。

必要?

false

位置?

named

預設值

All commands in the session.

接受管線輸入?

false

接受萬用字元?

false

-Encoding <string>

指定輸出檔的編碼。有效的值包括 "Unicode"、"UTF7"、"UTF8"、"ASCII"、"UTF32"、"BigEndianUnicode"、"Default" 和 "OEM"。預設為 "UTF-8"。

必要?

false

位置?

named

預設值

UTF-8

接受管線輸入?

false

接受萬用字元?

false

-Force

覆寫一個或多個現有的輸出檔案,即使檔案有唯讀屬性亦然。

必要?

false

位置?

named

預設值

False

接受管線輸入?

false

接受萬用字元?

false

-FormatTypeName <string[]>

只匯出指定之 Microsoft .NET Framework 型別的格式化指示。請輸入型別名稱。根據預設,Export-PSSession 會針對不在 System.Management.Automation 命名空間的所有 .NET Framework 型別匯出格式化指示。

這個參數的值必須是匯入命令之來源工作階段中的 Get-FormatData 命令所傳回的型別名稱。若要取得遠端工作階段中的所有格式化資料,請輸入 *。

如果您使用 FormatTypeName 參數,則除非您使用 CommandName 參數,否則不會匯出命令。

同樣地,如果您使用 CommandName 參數,則除非您使用 FormatTypeName 參數,否則不會匯出命令的格式化檔案。

必要?

false

位置?

4

預設值

接受管線輸入?

false

接受萬用字元?

false

-Module <string[]>

只匯出指定的 Windows PowerShell 嵌入式管理單元和模組中的命令。請輸入嵌入式管理單元和模組的名稱。不允許使用萬用字元。

如需詳細資訊,請參閱 about_Pssnapins 和 Import-Module。

必要?

false

位置?

named

預設值

All commands in the session.

接受管線輸入?

false

接受萬用字元?

false

-OutputModule <string>

針對 Export-PSSession 所建立的模組指定路徑 (選擇性) 和名稱。預設路徑為 $home\Documents\WindowsPowerShell\Modules。此參數為必要項。

如果 Export-PSSession 所建立的模組子目錄或任何檔案已經存在,此命令就會失敗。若要覆寫現有的檔案,請使用 Force 參數。

必要?

true

位置?

2

預設值

接受管線輸入?

false

接受萬用字元?

false

-Session <PSSession>

指定從中匯出命令的 PSSession。請輸入包含工作階段物件的變數或可取得工作階段物件的命令,例如 Get-PSSession 命令。此參數為必要項。

必要?

true

位置?

1

預設值

接受管線輸入?

false

接受萬用字元?

false

<CommonParameters>

這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.

輸入和輸出

輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。

輸入

您無法經由管道將物件輸出至 Export-PSSession。

輸出

System.IO.FileInfo

Export-PSSession 會傳回由它所建立之模組所組成的檔案清單。

附註

Export-PSSession 依存於 Windows PowerShell 遠端基礎結構。若要使用此 Cmdlet,電腦必須有設定遠端功能。如需詳細資訊,請參閱 about_Remote_Requirements。

您無法使用 Export-PSSession 匯出 Windows PowerShell 提供者。

匯出的命令會以隱含方式執行於其匯出的來源 PSSession。但是,在遠端執行命令的細節則是完全由 Windows PowerShell 處理。您可以執行匯出的命令,就像是執行本機命令一樣。

Export-Module 會在它所匯出的模組中擷取及儲存有關 PSSession 的資訊。如果當您匯入模組時,匯出這些命令的來源 PSSession 已關閉,而且相同的電腦上沒有使用中的 PSSessions,則此模組中的命令會嘗試重新建立 PSSession。如果嘗試重新建立 PSSession 的作業失敗,將不會執行匯出的命令。

Export-Module 在模組中所擷取及儲存的工作階段資訊並不包含工作階段選項,例如您在 $PSSessionOption 自動變數中指定的選項,或是使用 New-PSSession、Enter-PSSession 或 Invoke-Command Cmdlet 的 SessionOption 參數所指定的選項。如果當您匯入模組時,原始 PSSession 已關閉,此模組將會使用相同電腦上的另一個 PSSession (如果有的話)。若要讓匯入的命令能夠在正確設定的工作階段中執行,請使用您想要的選項來建立 PSSession,然後再匯入此模組。

為了尋找要匯出的命令,Export-PSSession 會使用 Invoke-Command Cmdlet 在 PSSession 中執行 Get-Command 命令。為了取得及儲存命令的格式化資料,它會使用 Get-FormatDataExport-FormatData Cmdlet。當您執行 Export-PSSession 命令時,您可能會看到來自 Invoke-Command、Get-Command、Get-FormatData 和 Export-FormatData 的錯誤訊息。此外,Export-PSSession 無法從未包含 Get-Command、Get-FormatData、Select-Object 和 Get-Help Cmdlet 的工作階段匯出命令。

Export-PSSession 會使用 Write-Progress Cmdlet 顯示命令的進度。您可能會在命令執行時看到進度列。

匯出的命令與其他遠端命令都有相同限制,包括無法啟動有使用者介面的程式,例如 [記事本]。

因為 Windows PowerShell 設定檔無法在 PSSessions 中執行,設定檔新增到工作階段中的命令將不會提供給 Export-PSSession。若要從設定檔匯出命令,請在匯出命令之前使用 Invoke-Command 命令,以手動方式在 PSSession 中執行設定檔。

Export-PSSession 所建立的模組可能包含格式化檔案,即使此命令未匯入格式化資料亦然。如果此命令未匯入格式化資料,所有建立的格式化檔案都不會包含格式化資料。

範例 1

C:\PS>$s = new-pssession -computerName Server01

C:\PS> export-pssession -session $s -outputModule Server01

描述
-----------
此範例的命令會從 Server01 電腦上的 PSSession 將所有命令匯出到本機電腦上的 Server01 模組,但與目前工作階段中的命令同名的命令則除外。它也會匯出命令的格式化資料。

第一個命令會在 Server01 電腦上建立 PSSession。第二個命令會將工作階段中的命令和格式化資料匯出到 Server01 模組。






範例 2

C:\PS>$s = new-pssession -ConnectionUri http://exchange.microsoft.com/mailbox -credential exchangeadmin01@hotmail.com -authentication negotiate

C:\PS> export-pssession -session $r -module exch* -commandname get-*, set-* -formattypename * -outputModule $pshome\Modules\Exchange -encoding ASCII

描述
-----------
這些命令會從遠端電腦上的 Microsoft Exchange Server 嵌入式管理單元,將 Get 和 Set 命令匯出到本機電腦上 $pshome\Modules 目錄的 Exchange 模組。

將此模組放在 $pshome\Module 目錄中可讓電腦的所有使用者更方便存取它。






範例 3

C:\PS>$s = new-pssession -computerName Server01 -credential Server01\User01

C:\PS> export-pssession -session $s -outputModule TestCmdlets -type cmdlet -commandname *test* -formattypename *

C:\PS> remove-pssession $s

C:\PS> import-module TestCmdlets

C:\PS> get-help test*

C:\PS> test-files

描述
-----------
這些命令會從遠端電腦上的 PSSession 匯出 Cmdlet,並將其儲存到本機電腦上的模組。然後,這些命令會將模組中的 Cmdlet 加入至目前的工作階段,以便於使用。

第一個命令會在 Server01 電腦上建立 PSSession,然後將其儲存到 $s 變數。

第二個命令會從 $s 中的 PSSession 將名稱開頭為 "Test" 的 Cmdlet 匯出到本機電腦的 TestCmdlets 模組。

第三個命令會使用 Remove-PSSession Cmdlet 從目前工作階段中刪除 $s 中的 PSSession。這個命令顯示 PSSession 不需要使用中,也可以使用從它匯入的命令。

第四個命令會使用 Import-Module Cmdlet 將 TestCmdlets 模組中的 Cmdlet 加入至目前工作階段,而這個命令隨時都能在任何工作階段中執行。

第五個命令會使用 Get-Help Cmdlet 取得名稱開頭為 "Test" 之 Cmdlet 的說明。在將模組中的命令加入至目前工作階段之後,您就可以使用 Get-Help 和 Get-Command Cmdlet 深入了解匯入的命令,就如同工作階段中的任何命令一樣。

第六個命令會使用 Test-Files Cmdlet,此 Cmdlet 是從 Server01 電腦所匯出,然後再加入至工作階段而得來。

Test-Files 命令實際上是在此命令匯入來源之電腦上的遠端工作階段執行,但是這無法明顯看出來。Windows PowerShell 會從模組中所儲存的資訊建立工作階段。






範例 4

C:\PS>export-pssession -session $s -AllowClobber -outputModule AllCommands

描述
-----------
這個命令會從 $s 變數中的 PSSession 將所有命令和所有格式化資料匯出到目前工作階段。這些命令會使用 AllowClobber 參數來包含與目前工作階段中的命令同名的命令。






範例 5

C:\PS>$options = New-PSSessionOption -NoMachineProfile

C:\PS> $s = new-pssession -computername Server01 -sessionoption $options

C:\PS> export-pssession -session $s -outputModule Server01

C:\PS> remove-pssession $s

C:\PS> new-pssession -computername Server01 -sessionoption $options

C:\PS> import-module Server01

描述
-----------
這個範例顯示當匯出這些命令的來源 PSSession 關閉時,如何在工作階段中使用特定的選項執行匯出的命令。

當您使用 Export-PSSession 時,它會在它所建立的模組中儲存有關原始 PSSession 的資訊。當您匯入此模組時,如果原始的遠端工作階段已關閉,此模組將會使用連接到原始電腦的任何開啟的遠端工作階段。

如果目前的工作階段並未包含與原始電腦之間的遠端工作階段,此模組中的命令將會重新建立與該電腦之間的工作階段。但是,Export-PSSession 並不會在模組中儲存特殊選項,例如使用 New-PSSession 的 SessionOption 參數所設定的選項。

因此,如果您想要在遠端工作階段中使用特定選項來執行匯出的命令,您必須使用您想要的選項來建立遠端工作階段,然後再匯入此模組。

第一個命令會使用 New-PSSessionOption Cmdlet 來建立 PSSessionOption 物件,並將此物件儲存在 $options 變數中。

第二個命令會建立包含指定之選項的 PSSession,此命令會使用 New-PSSession Cmdlet,在 Server01 電腦上建立 PSSession。此命令也會使用 SessionOption 參數提交 $options 中的選項物件。

第三個命令會使用 Export-PSSession Cmdlet,從 $s 中的 PSSession 將命令匯出到 Server01 模組。

第四個命令會使用 Remove-PSSession Cmdlet 刪除 $s 變數中的 PSSession。

第五個命令會使用 New-PSSession Cmdlet,建立連接至 Server01 電腦的新 PSSession。這個 PSSession 也會使用 $options 變數中的工作階段選項。

第六個命令會使用 Import-Module Cmdlet 匯入 Server01 模組中的命令,此模組中的命令會在 Server01 電腦上的 PSSession 中執行。






請參閱




目錄