共用方式為


Import-PSSession

將命令從另一個會話匯入至目前的會話。

語法

Import-PSSession
      [-Prefix <String>]
      [-DisableNameChecking]
      [[-CommandName] <String[]>]
      [-AllowClobber]
      [-ArgumentList <Object[]>]
      [-CommandType <CommandTypes>]
      [-Module <String[]>]
      [-FullyQualifiedModule <ModuleSpecification[]>]
      [[-FormatTypeName] <String[]>]
      [-Certificate <X509Certificate2>]
      [-Session] <PSSession>
      [<CommonParameters>]

Description

Import-PSSession cmdlet 將命令(如 cmdlet、函數和別名)從本地或遠端電腦上的 PSSession 導入到當前會話中。 您可以匯入 Get-Command Cmdlet 可在 PSSession 中找到的任何命令。

使用 Import-PSSession 命令,從自定義殼層匯入命令,例如Microsoft Exchange Server 殼層,或從包含 Windows PowerShell 模組和嵌入式管理單元或其他不在目前會話中的元素的會話匯入命令。

若要匯入命令,請先使用 New-PSSession Cmdlet 來建立 PSSession。 然後,使用 Import-PSSession Cmdlet 匯入命令。 根據預設,Import-PSSession 會匯入所有命令,但目前會話中具有相同名稱的命令除外。 若要匯入所有命令,請使用 AllowClobber 參數。

您可以使用匯入的命令,就像在會話中使用任何命令一樣。 當您使用匯入的命令時,命令的匯入部分會在匯入命令的會話中隱含執行。 不過,遠端作業完全由 Windows PowerShell 處理。 您甚至不需要注意它們,不同之處在於您必須保持與其他會話 (PSSession) 的連線。 如果您關閉它,匯入的命令就無法再使用。

由於匯入的命令可能需要比本機命令更長的時間,Import-PSSession 會將 AsJob 參數新增至每個匯入的命令。 此參數可讓您以 Windows PowerShell 背景工作的形式執行命令。 如需詳細資訊,請參閱about_Jobs。

當您使用 Import-PSSession時,Windows PowerShell 會將匯入的命令新增至只存在於會話中的暫存模組,並傳回代表模組的物件。 若要建立可在日後會話中使用的持續性模組,請使用 Export-PSSession Cmdlet。

Import-PSSession Cmdlet 會使用 Windows PowerShell 的隱含遠端功能。 當您將命令匯入目前工作階段時,它們會在原始工作階段或原始電腦上的類似工作階段中隱含執行。

從 Windows PowerShell 3.0 開始,您可以使用 Import-Module Cmdlet,將模組從遠端會話匯入目前的會話。 此功能使用隱含遠端。 這相當於使用 Import-PSSession,將選取的模組從遠端會話匯入目前的會話。

範例

範例 1:從 PSSession 匯入所有命令

PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Import-PSSession -Session $S

此命令會將 Server01 計算機上 PSSession 的所有命令匯入目前的會話,但目前會話中具有相同名稱的命令除外。

因為此命令不會使用 CommandName 參數,所以也會匯入匯入命令所需的所有格式數據。

範例 2:匯入以特定字串結尾的命令

PS C:\> $S = New-PSSession https://ps.testlabs.com/powershell
PS C:\> Import-PSSession -Session $S -CommandName *-test -FormatTypeName *
PS C:\> New-Test -Name Test1
PS C:\> Get-Test test1 | Run-Test

這些命令會將名稱為 「-test」 的命令從 PSSession 匯入本機會話,然後顯示如何使用匯入的 Cmdlet。

第一個命令會使用 New-PSSession Cmdlet 來建立 PSSession。 它將 PSSession 保存在 $S 變數中。

第二個命令使用 Import-PSSession cmdlet 將 PSSession 中的命令導入當前會話$S。 它會使用 CommandName 參數來指定具有 Test 名詞和 FormatTypeName 參數的命令,以匯入 Test 命令的格式數據。

第三和第四個命令會使用目前會話中匯入的命令。 由於匯入的命令實際上會新增至目前的會話,因此您可以使用本機語法來執行它們。 您不需要使用 Invoke-Command Cmdlet 來執行匯入的命令。

範例 3:從 PSSession 匯入 Cmdlet

PS C:\> $S1 = New-PSSession -ComputerName s1
PS C:\> $S2 = New-PSSession -ComputerName s2
PS C:\> Import-PSSession -Session s1 -Type cmdlet -Name New-Test, Get-Test -FormatTypeName *
PS C:\> Import-PSSession -Session s2 -Type Cmdlet -Name Set-Test -FormatTypeName *
PS C:\> New-Test Test1 | Set-Test -RunType Full

此範例示範您可以使用匯入的 Cmdlet,就像使用本機 Cmdlet 一樣。

這些命令會從 Server01 計算機上的 PSSession 匯入 New-Test 和 Get-Test Cmdlet,以及 Server02 電腦上的 PSSession Set-Test Cmdlet。

即使 Cmdlet 是從不同的 PSSession 匯入的,您也可以使用管線將物件從某個 Cmdlet 傳送到另一個 Cmdlet,而不會發生錯誤。

範例 4:以背景工作身分執行匯入的命令

PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Import-PSSession -Session $S -CommandName *-test* -FormatTypeName *
PS C:\> $batch = New-Test -Name Batch -AsJob
PS C:\> Receive-Job $batch

此範例示範如何以背景工作的形式執行匯入的命令。

由於匯入的命令可能需要比本機命令更長的時間,Import-PSSession 會將 AsJob 參數新增至每個匯入的命令。 AsJob 參數可讓您以背景工作的形式執行命令。

第一個命令在 Server01 計算機上創建 PSSession,並將 PSSession 物件保存在 $S 變數中。

第二個命令使用 Import-PSSession 將 Test cmdlet 從 $S 中的 PSSession 導入到當前會話中。

第三個命令會使用匯入 New-Test Cmdlet 的 AsJob 參數,以背景工作的形式執行 New-Test 命令。 命令會將 New-Test 傳回的工作物件儲存在 $batch 變數中。

第四個命令會使用 Receive-Job Cmdlet 來取得$batch變數中作業的結果。

範例 5:從 Windows PowerShell 模組匯入 Cmdlet 和函式

PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Invoke-Command -Session $S {Import-Module TestManagement}
PS C:\> Import-PSSession -Session $S -Module TestManagement

此範例示範如何將遠端電腦上的 Windows PowerShell 模組中的 Cmdlet 和函式匯入目前的會話。

第一個命令在 Server01 計算機上創建 PSSession,並將其保存在 $S 變數中。

第二個命令使用 Invoke-Command cmdlet 在 $S 的 PSSession 中運行 Import-Module 命令。

一般而言,模組會由 Windows PowerShell 配置檔中的 Import-Module 命令新增至所有會話,但配置檔不會在 PSSessions 中執行。

第三個命令會使用 Import-PSSessionModule 參數,將模組中的 Cmdlet 和函式匯入目前的會話。

範例 6:在暫存盤中建立模組

PS C:\> Import-PSSession $S -CommandName Get-Date, SearchHelp -FormatTypeName * -AllowClobber

Name              : tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1zunz.ttf
Path              : C:\Users\User01\AppData\Local\Temp\tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1zunz.ttf\tmp_79468106-4e1d-4d90-af97-1154f9317239_
tcw1zunz.ttf.psm1
Description       : Implicit remoting for http://server01.corp.fabrikam.com/wsman
Guid              : 79468106-4e1d-4d90-af97-1154f9317239
Version           : 1.0
ModuleBase        : C:\Users\User01\AppData\Local\Temp\tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1zunz.ttf
ModuleType        : Script
PrivateData       : {ImplicitRemoting}
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Get-Date, Get-Date], [SearchHelp, SearchHelp]}
ExportedVariables : {}
NestedModules     : {}

此範例顯示 Import-PSSession 在磁碟上的暫存盤中建立模組。 它也會顯示所有命令都會在匯入目前會話之前轉換成函式。

此命令會使用 Import-PSSession Cmdlet,將 Get-Date Cmdlet 和 SearchHelp 函式匯入目前的會話。

Import-PSSession Cmdlet 會傳回代表暫存模組的 PSModuleInfo 物件。 Path 屬性的值會顯示 Import-PSSession 在暫存位置建立腳本模組 (.psm1) 檔案。 ExportedFunctions 屬性顯示 Get-Date cmdlet 和 SearchHelp 函數都是作為函數導入的。

範例 7:執行匯入命令隱藏的命令

PS C:\> Import-PSSession $S -CommandName Get-Date -FormatTypeName * -AllowClobber

PS C:\> Get-Command Get-Date -All

CommandType   Name       Definition
-----------   ----       ----------
Function      Get-Date   ...
Cmdlet        Get-Date   Get-Date [[-Date] <DateTime>] [-Year <Int32>] [-Month <Int32>]

PS C:\> Get-Date
09074

PS C:\> (Get-Command -Type Cmdlet -Name Get-Date).PSSnapin.Name
Microsoft.PowerShell.Utility

PS C:\> Microsoft.PowerShell.Utility\Get-Date
Sunday, March 15, 2009 2:08:26 PM

此範例示範如何執行匯入命令所隱藏的命令。

第一個命令從 $S 變數中的 PSSession 導入 Get-Date cmdlet。 由於目前的會話包含 Get-Date Cmdlet,因此命令中需要 AllowClobber 參數。

第二個命令會使用 Get-Command Cmdlet 的 All 參數,來取得目前會話中的所有 Get-Date 命令。 輸出顯示會話包含原始 Get-Date Cmdlet 和 Get-Date 函式。 Get-Date 函數在 $S 的 PSSession 中運行導入的 Get-Date cmdlet。

第三個命令會執行 Get-Date 命令。 因為函式的優先順序高於 Cmdlet,Windows PowerShell 會執行匯入的 Get-Date 函式,其會傳回 Julian 日期。

第四和第五個命令示範如何使用限定名稱來執行匯入命令所隱藏的命令。

第四個命令會取得將原始 Get-Date Cmdlet 新增至目前會話的 Windows PowerShell 嵌入式管理單元名稱。

第五個命令會使用 get-Date Cmdlet 嵌入式管理單元限定名稱來執行 Get-Date 命令。

如需命令優先順序和隱藏命令的詳細資訊,請參閱about_Command_Precedence。

範例 8:匯入名稱中有特定字串的命令

PS C:\> Import-PSSession -Session $S -CommandName *Item* -AllowClobber

此命令從 $S 的 PSSession 中導入名稱中包含“Item”的命令。 因為命令包含 CommandName 參數,但不包含 FormatTypeData 參數,因此只會匯入命令。

當您使用 Import-PSSession 在遠端電腦上執行命令,而且您在目前工作階段中已經有命令的格式設定資料時,請使用此命令。

範例 9:使用 Module 參數來探索哪些命令已匯入工作階段

PS C:\> $M = Import-PSSession -Session $S -CommandName *bits* -FormatTypeName *bits*
PS C:\> Get-Command -Module $M
CommandType     Name
-----------     ----
Function        Add-BitsFile
Function        Complete-BitsTransfer
Function        Get-BitsTransfer
Function        Remove-BitsTransfer
Function        Resume-BitsTransfer
Function        Set-BitsTransfer
Function        Start-BitsTransfer
Function        Suspend-BitsTransfer

此命令示範如何使用 get-Command Module 參數,以 Import-PSSession 命令找出哪些命令已匯入會話。

第一個命令使用 Import-PSSession cmdlet 導入名稱中包含 $S 變數中 PSSession 的“位”的命令。 Import-PSSession 命令會傳回暫存模組,而 命令會將模組儲存在 $m 變數中。

第二個命令使用 Get-Command cmdlet 獲取模組在 $M 變數中導出的命令。

Module 參數會採用字串值,這是針對模組名稱所設計。 不過,當您提交模組物件時,Windows PowerShell 會在模組物件上使用 ToString 方法,這會傳回模組名稱。

Get-Command 命令相當於 “Get-Command $M.Name”。

參數

-AllowClobber

表示此 Cmdlet 會匯入指定的命令,即使它們的名稱與目前工作階段中的命令相同。

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

根據預設,Import-PSSession 不會匯入與目前會話中命令同名的命令。

類型:SwitchParameter
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-ArgumentList

指定使用指定自變數所產生的命令陣列(參數值)。

例如,要在 $S 的 PSSession 的憑證 (Cert:) 驅動器中匯入 Get-Item 命令的變體,請鍵入 Import-PSSession -Session $S -Command Get-Item -ArgumentList cert:

類型:Object[]
別名:Args
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Certificate

指定用來簽署格式檔案的客戶端憑證 (*。格式.ps1xml) 或腳本模組檔案 (.psm1) 在 Import-PSSession 建立的暫存模組中。

輸入包含憑證的變數,或取得憑證的命令或表達式。

若要尋找憑證,請使用 Get-PfxCertificate Cmdlet,或使用憑證 (Cert:) 磁碟驅動器中的 Get-ChildItem Cmdlet。 如果憑證無效或沒有足夠的授權單位,則命令會失敗。

類型:X509Certificate2
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-CommandName

指定具有指定名稱或名稱模式的命令。 允許使用通配符。 使用 CommandName 或其別名,Name

根據預設,Import-PSSession 會從會話匯入所有命令,但目前會話中具有相同名稱的命令除外。 這可防止匯入的命令隱藏或取代會話中的命令。 若要匯入所有命令,即使是隱藏或取代其他命令的命令,請使用allowClobber 參數

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

類型:String[]
別名:Name
Position:2
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-CommandType

指定命令物件的類型。 預設值為 Cmdlet。 使用 CommandType 或其別名,Type。 此參數可接受的值為:

  • 別名。 遠程會話中的 Windows PowerShell 別名。
  • 全部。 遠程會話中的 cmdlet 和函數。
  • 應用。 遠端會話中Path環境變數 ($env:path) 中列出的路徑中除 Windows-PowerShell 檔以外的所有檔,包括 .txt、 .exe和 .dll 檔。
  • Cmdlet。 遠程會話中的 cmdlet。 “Cmdlet” 是預設值。
  • ExternalScript。 .ps1 遠端工作階段中Path環境變數 ($env:path) 中列出的路徑中的檔。
  • 篩選和函式。 Windows PowerShell 在遠端會話中運行。
  • 腳本。 腳本塊在遠程會話中。
類型:CommandTypes
別名:Type
接受的值:Alias, Function, Filter, Cmdlet, ExternalScript, Application, Script, Workflow, Configuration, All
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-DisableNameChecking

指出當您匯入名稱包含未核准動詞或禁止字元的 Cmdlet 或函式時,此 Cmdlet 會隱藏警告您訊息。

根據預設,當您匯入的模組匯出名稱中具有未核准動詞命令的 Cmdlet 或函式時,Windows PowerShell 會顯示下列警告訊息:

「警告:某些彙入的命令名稱包含未經核准的動詞,這可能會使其更容易探索。 如需詳細資訊或類型 Get-Verb,請使用 Verbose 參數來查看已核准的動詞清單。

此訊息只是警告。 完整模組仍會匯入,包括不符合規範的命令。 雖然訊息會顯示給模組使用者,但模組作者應該修正命名問題。

類型:SwitchParameter
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-FormatTypeName

指定指定之Microsoft .NET Framework 類型的格式化指示。 輸入類型名稱。 允許使用通配符。

此參數的值必須是匯入命令之會話中 Get-FormatData 命令所傳回的類型名稱。 若要取得遠端會話中的所有格式化數據,請輸入 *。

如果命令不包含 CommandNameFormatTypeName 參數, 則 Import-PSSession 將導入遠端會話中 Get-FormatData 命令傳回的所有 .NET Framework 類型的格式設置說明。

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

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

類型:String[]
Position:3
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-FullyQualifiedModule

指定具有以 ModuleSpecification 物件形式指定的名稱的模組(在 MSDN 庫中 ModuleSpecification 構造函數 (Hashtable) 的「備註」部分中介紹)。 例如,FullyQualifiedModule 參數接受以 @{ModuleName = “modulename” 格式指定的模組名稱;ModuleVersion = “version_number”} 或 @{ModuleName = “modulename”;ModuleVersion = “version_number”;Guid = “GUID”}。 需要 ModuleNameModuleVersion,但 Guid 是選擇性的。

不能在與 Module 參數相同的命令中指定 FullyQualifiedModule 參數;這兩個參數是互斥的。

類型:ModuleSpecification[]
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Module

指定和陣列 Windows PowerShell 嵌入式管理單元和模組中的命令。 輸入嵌入式管理單元和模組名稱。 不允許通配符。

Import-PSSession 無法從嵌入式管理單元匯入提供者。

如需詳細資訊,請參閱 about_PSSnapins 和 about_Modules

類型:String[]
別名:PSSnapin
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Prefix

指定匯入命令名稱中名詞的前置詞。

使用此參數可避免會話中不同命令具有相同名稱時可能發生的名稱衝突。

例如,如果指定前綴 Remote,然後導入 Get-Date cmdlet,則該 cmdlet 在會話中稱為 Get-RemoteDate,並且不會與原始 Get-Date cmdlet 混淆。

類型:String
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Session

指定匯入 Cmdlet 的來源 PSSession。 輸入包含會話物件的變數,或取得會話物件的命令,例如 New-PSSession 或 Get-PSSession 命令。 您只能指定一個工作階段。 這是必要參數。

類型:PSSession
Position:0
預設值:None
必要:True
接受管線輸入:False
接受萬用字元:False

輸入

None

您無法使用管線將物件傳送至此 Cmdlet。

輸出

PSModuleInfo

Import-PSSession 會傳回 New-Module 和 Get-Module Cmdlet 傳回的相同模組物件。 不過,匯入的模組是暫時的,而且只存在於目前的會話中。 若要在磁碟上建立永久模組,請使用 Export-PSSession Cmdlet。

備註

  • Import-PSSession 依賴 Windows PowerShell 遠端基礎結構。 若要使用此 Cmdlet,計算機必須設定為遠端 WS-Management。 如需詳細資訊,請參閱about_Remote和about_Remote_Requirements。
  • Import-PSSession 不會匯入變數或 Windows PowerShell 提供者。
  • 當您匯入與目前會話中命令同名的命令時,匯入的命令可以隱藏會話中的別名、函式和 Cmdlet,而且它們可以取代會話中的函式和變數。 若要防止名稱衝突,請使用 Prefix 參數。 如需詳細資訊,請參閱about_Command_Precedence。
  • Import-PSSession 將所有命令轉換成函式,然後再匯入它們。 因此,匯入的命令的行為會與保留原始命令類型時的行為稍有不同。 例如,如果您從 PSSession 匯入 Cmdlet,然後從模組或嵌入式管理單元匯入具有相同名稱的 Cmdlet,則從 PSSession 匯入的 Cmdlet 預設一律會執行,因為函式優先於 Cmdlet。 相反地,如果您將別名匯入具有相同名稱之別名的會話,則一律會使用原始別名,因為別名的優先順序高於函式。 如需詳細資訊,請參閱about_Command_Precedence。
  • Import-PSSession 會使用 Write-Progress Cmdlet 來顯示命令的進度。 當命令執行時,您可能會看到進度列。
  • 若要尋找要匯入的命令,Import-PSSession 會使用 Invoke-Command Cmdlet 在 PSSession 中執行 Get-Command 命令。 若要取得命令的格式數據,它會使用 Get-FormatData Cmdlet。 當您運行 Import-PSSession 命令時,您可能會看到來自這些 cmdlet 的錯誤訊息。 此外,Import-PSSession 無法從不包含 Get-Command、Get-FormatData、Select-Object 和 Get-Help Cmdlet 的 PSSession 匯入命令。
  • 匯入的命令與其他遠端命令具有相同的限制,包括無法使用使用者介面啟動程式,例如記事本。
  • 由於 Windows PowerShell 設定檔未在 PSSessions 中執行,因此設定檔新增至會話的命令無法 Import-PSSession。 若要從配置檔匯入命令,請使用 Invoke-Command 命令,在匯入命令之前手動在 PSSession 中執行配置檔。
  • Import-PSSession 建立的暫存模組可能包含格式化檔案,即使命令未匯入格式化數據也一樣。 如果命令未匯入格式化數據,所建立的任何格式化檔案都不會包含格式化數據。
  • 若要使用 Import-PSSession,目前會話中的執行原則不能是 [受限制] 或 [全部簽署],因為 Import-PSSession 建立的暫存模組包含這些原則禁止的未簽署腳本檔案。 若要使用 Import-PSSession 而不變更本機計算機的執行原則,請使用 Set-ExecutionPolicy 的 Scope 參數,為單一進程設定較不嚴格的執行原則。
  • 在 Windows PowerShell 2.0 中,從另一個會話匯入之命令的說明主題不包含您使用 Prefix 參數指派的前置詞。 若要取得 Windows PowerShell 2.0 中匯入命令的說明,請使用原始的 (非前置詞) 命令名稱。