Export-PSSession
從另一個工作階段匯入命令,並將其儲存在 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 |
預設值 |
工作階段中的所有命令。 |
接受管線輸入? |
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 |
預設值 |
工作階段中的所有命令。 |
接受管線輸入? |
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 |
預設值 |
工作階段中的所有命令。 |
接受管線輸入? |
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-FormatData 和 Export-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 中執行。
請參閱
概念
about_Command_Precedence
Import-PSSession
New-PSSession
Import-Module
Invoke-Command
about_PSSessions