將模組新增至目前工作階段。

語法

Import-Module [-Name] <string[]> [-Alias <string[]>] [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Force] [-Function <string[]>] [-Global] [-PassThru] [-Prefix <string>] [-Variable <string[]>] [-Version <Version>] [<CommonParameters>]

Import-Module [-Assembly] <Assembly[]> [-Alias <string[]>] [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Force] [-Function <string[]>] [-Global] [-PassThru] [-Prefix <string>] [-Variable <string[]>] [-Version <Version>] [<CommonParameters>]

Import-Module [-ModuleInfo] <PSModuleInfo[]> [-Alias <string[]>] [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Force] [-Function <string[]>] [-Global] [-PassThru] [-Prefix <string>] [-Variable <string[]>] [-Version <Version>] [<CommonParameters>]

描述

Import-Module Cmdlet 會將一個或多個模組新增至目前的工作階段。

模組是一種封裝,其中包含可用於 Windows PowerShell 的成員 (例如 Cmdlet、提供者、指令碼、函數、變數,以及其他工具與檔案)。匯入模組之後,您就可以在工作階段中使用模組成員。

若要匯入模組,請使用 Name、Assembly 或 ModuleInfo 參數識別要匯入的模組。根據預設,雖然 Import-Module 會匯入模組所匯出的所有成員,不過您可以使用 Alias、Function、Cmdlet 和 Variable 參數來限制要匯入的成員。

Import-Module 只會將模組匯入至目前的工作階段。若要將模組匯入至所有工作階段,請將 Import-Module 命令新增至 Windows PowerShell 設定檔。如需設定檔的詳細資訊,請參閱 about_Profiles。

如需模組的詳細資訊,請參閱 about_Modules。

參數

-Alias <string[]>

只將指定的別名從模組匯入至目前的工作階段。請輸入以逗號分隔的別名清單。允許使用萬用字元。

某些模組會在您匯入時,自動將選取的別名匯出至工作階段。此參數可讓您從匯出的別名中進行選擇。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

true

-ArgumentList <Object[]>

指定 Import-Module 命令執行期間傳遞至指令碼模組的引數 (參數值)。此參數只有當您匯入指令碼模組時才有效。

您也可以利用內建的別名 "args" 來參照 ArgumentList。如需詳細資訊,請參閱 about_Aliases。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-AsCustomObject

傳回自訂物件,其成員表示已匯入的模組成員。此參數只適用於指令碼模組。

使用 AsCustomObject 參數時,Import-Module 會將模組成員匯入至工作階段,然後傳回 PSCustomObject 物件而非 PSModuleInfo 物件。您可以將自訂物件儲存到變數中,並使用點標記法來叫用成員。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Assembly <Assembly[]>

匯入在指定之組件物件中實作的 Cmdlet 和提供者。請輸入包含組件物件的變數,或輸入可建立組件物件的命令。您也可以經由管道將組件物件輸出至 Import-Module。

使用此參數時,只會匯入指定之已編譯組件所實作的 Cmdlet 和提供者。如果模組包含其他檔案,這些檔案並不會匯入,因此您可能會遺漏模組的重要成員。請使用此參數來偵錯及測試模組,或是依照模組作者的指示使用此參數。

必要?

true

位置?

1

預設值

接受管線輸入?

true (ByValue)

接受萬用字元?

false

-Cmdlet <string[]>

只將指定的 Cmdlet 從模組匯入至目前的工作階段。請輸入 Cmdlet 的清單。允許使用萬用字元。

某些模組會在您匯入時,自動將選取的 Cmdlet 匯出至工作階段。此參數可讓您從匯出的 Cmdlet 中進行選擇。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

true

-Force

重新匯入模組及其成員,即使該模組或其成員具有唯讀的存取模式也一樣。

必要?

false

位置?

named

預設值

False

接受管線輸入?

false

接受萬用字元?

false

-Function <string[]>

只將指定的函數從模組匯入至目前的工作階段。請輸入函數的清單。允許使用萬用字元。

某些模組會在您匯入時,自動將選取的函數匯出至工作階段。此參數可讓您從匯出的函數中進行選擇。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

true

-Global

當這個參數用於指令碼模組 (.psm1) 時,它會將模組匯入全域工作階段狀態中。

此參數只有當它出現在指令碼模組時才有效。否則,系統會忽略此參數。

根據預設,指令碼模組中的命令 (包括巢狀模組中的命令) 都會匯入呼叫者的工作階段狀態中。若要限制模組所匯出的命令,請在指令碼模組中使用 Export-ModuleMember 命令。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-ModuleInfo <PSModuleInfo[]>

指定要匯入的模組物件。請輸入包含模組物件的變數,或輸入可取得模組物件的命令,例如 "Get-Module -listavailable" 命令。您也可以經由管道將模組物件輸出至 Import-Module。

必要?

true

位置?

1

預設值

接受管線輸入?

true (ByValue)

接受萬用字元?

false

-Name <string[]>

指定要匯入的模組名稱。請輸入模組的名稱或模組中檔案的名稱,例如 .psd1、.psm1、.dll 或 .ps1 檔案。檔案路徑為選擇項。不允許使用萬用字元。您也可以經由管道將模組名稱和檔案名稱輸出至 Import-Module。

如果您省略路徑,Import-Module 就會在 PSModulePath 環境變數 ($env:PSModulePath) 中儲存的路徑內尋找模組。

請盡可能單獨指定模組名稱。當您指定檔案名稱時,只會匯入該檔案中實作的成員。如果模組包含其他檔案,這些檔案並不會匯入,因此您可能會遺漏模組的重要成員。

必要?

true

位置?

1

預設值

接受管線輸入?

true (ByValue)

接受萬用字元?

false

-PassThru

傳回表示已匯入之模組的物件。根據預設,此 Cmdlet 不會產生任何輸出。

附註

-- 當您透過 PassThru 參數,經由管道將 "Get-Module -listavailable" 命令的輸出輸出至 Import-Module 命令時,Import-Module 會傳回 Get-Module 傳遞給它的物件,但不會更新該物件,因此便尚未填入 Exported 和 NestedModules 屬性。

-- 當您使用 Prefix 參數指定成員的首碼時,首碼並不會出現在模組物件屬性的成員名稱中。物件會記錄套用首碼之前匯出的項目。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Prefix <string>

將指定的首碼新增至已匯入之模組成員名稱中的名詞。

請使用此參數避免名稱衝突,當工作階段中不同成員具有相同名稱時,便可能發生此衝突。這個參數不會變更模組,也不會影響模組為了自行使用而匯入的檔案 (稱為「巢狀模組」)。它只會影響目前工作階段中成員的名稱。

例如,如果您指定首碼 "UTC",然後匯入 Get-Date Cmdlet,則工作階段會將此 Cmdlet 識別為 Get-UTCDate,以免與原始的 Get-Date Cmdlet 混淆。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Variable <string[]>

只將指定的變數從模組匯入至目前的工作階段。請輸入變數的清單。允許使用萬用字元。

某些模組會在您匯入時,自動將選取的變數匯出至工作階段。此參數可讓您從匯出的變數中進行選擇。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

true

-Version <Version>

指定要匯入的模組版本。當系統有相同模組的不同版本時,請使用這個參數。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

<CommonParameters>

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

輸入和輸出

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

輸入

System.String、System.Management.Automation.PSModuleInfo 或 System.Reflection.Assembly

您可經由管道將模組名稱、模組物件或組件物件輸出至 Import-Module。

輸出

無、System.Management.Automation.PSModuleInfo 或 System.Management.Automation.PSCustomObject

根據預設,Import-Module 不會產生任何輸出。如果使用 PassThru 參數,它會產生代表模組的 System.Management.Automation.PSModuleInfo 物件。如果使用 AsCustomObject 參數,則會產生 PSCustomObject 物件。

附註

您也可以利用 Import-Module 的別名 ("ipmo") 來表示此 Cmdlet。如需詳細資訊,請參閱 about_Aliases。

您必須先將模組目錄複製到本機電腦可存取的目錄,然後才能匯入模組。如需詳細資訊,請參閱 about_Modules。

由於模組成員會在自己的私人模組工作階段狀態中執行,因此它們用於內部處理的命令不會影響您的工作階段狀態。

如果您將相同名稱和相同類型的成員匯入至工作階段,Windows PowerShell 預設會使用最後匯入的成員。變數和別名都會被取代,而且其原始項目也會變成無法存取。新成員只會「遮蔽」函數、Cmdlet 和提供者,而且您可以利用嵌入式管理單元、模組或函數路徑來限定命令名稱,以便存取這些項目。

若要更新已經從模組匯入之命令的格式化資料,請使用 Update-FormatData Cmdlet。Update-FormatData 也會在工作階段中更新從模組匯入之命令的格式化資料。如果模組的格式化檔案已變更,您就可以執行 Update-FormatData 命令來更新匯入命令的格式化資料。不過,您不需要再次匯入模組。

若要匯入 Import-PSSessionExport-PSSession 所建立的模組,目前工作階段中的執行原則不得為 Restricted 或 AllSigned,因為 Import-PSSessionExport-PSSession 所建立的模組包含這些原則禁止使用的未經簽署指令碼檔案。若要使用 Import-Module 而不變更本機電腦的執行原則,請使用 Set-ExecutionPolicy 的 Scope 參數,針對單一處理序設定限制較少的執行原則。

範例 1

C:\PS>import-module -name BitsTransfer

描述
-----------
這個命令會將 BitsTransfer 模組的成員都匯入至目前的工作階段。

Name 參數名稱 (-Name) 為選擇項,可以省略。

根據預設,Import-Module 不會在匯入模組時產生任何輸出。若要要求輸出,請使用 PassThru 或 AsCustomObject 參數,或是 Verbose 一般參數。






範例 2

C:\PS>get-module -listAvailable | import-module

描述
-----------
這個命令會將 PSModulePath 環境變數 ($env:psmodulepath) 所指定之路徑中的所有可用模組匯入至目前的工作階段。






範例 3

C:\PS>$m = get-module -ListAvailable BitsTransfer, ServerBackup

C:\PS> import-module -moduleInfo $m

描述
-----------
這個命令會將 BitsTransfer 和 ServerBackup 模組的成員都匯入至目前的工作階段。

第一個命令會使用 Get-Module Cmdlet 取得表示 BitsTransfer 和 ServerBackup 模組的 PSModuleInfo 物件,並將這些物件儲存在 $m 變數中。您必須指定 ListAvailable 參數,才能取得尚未匯入至工作階段的模組。

第二個命令會使用 Import-Module 的 ModuleInfo 參數,將模組匯入至目前的工作階段。

這些命令等同於使用管線運算子 (|) 將 Get-Module 命令的輸出傳送給 Import-Module。






範例 4

C:\PS>import-module -name c:\ps-test\modules\test -verbose

VERBOSE: Loading module from path 'C:\ps-test\modules\Test\Test.psm1'.
VERBOSE: Exporting function 'my-parm'.
VERBOSE: Exporting function 'get-parm'.
VERBOSE: Exporting function 'get-spec'.
VERBOSE: Exporting function 'get-specDetails'.

描述
-----------
這個命令會使用明確的路徑,識別要匯入的模組。

它也會使用 Verbose 一般參數,取得已從模組匯入的項目清單。如果沒有使用 Verbose、PassThru 或 AsCustomObject 參數,Import-Module 就不會在匯入模組時產生任何輸出。






範例 5

C:\PS>import-module BitsTransfer -cmdlet Add-BitsTransferFile, Get-BitsTransfer

C:\PS> get-module BitsTransfer

Name              : BitsTransfer
Path              : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\BitsTransfer\BitsTransfer.psd1
Description       :
Guid              : 8fa5064b-8479-4c5c-86ea-0d311fe48875
Version           : 1.0.0.0
ModuleBase        : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\BitsTransfer
ModuleType        : Manifest
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {[Add-BitsTransfer, Add-BitsTransfer], [Complete-BitsTransfer, Complete-BitsTransfer], [Get-BitsTransfer, Get-BitsTransfer], [Rem
                    ove-BitsTransfer, Remove-BitsTransfer]...}
ExportedFunctions : {}
ExportedVariables : {}
NestedModules     : {Microsoft.BackgroundIntelligentTransfer.Management}


C:\PS> get-command -module BitsTransfer

CommandType Name                Definition
----------- ----                ----------
Cmdlet      Add-BitsTransfer    Add-BitsTransfer [-BitsJob] <BitsJob[]> [-Source] <String[]> [[-Destination] <String[]>] [-Verbose] [-Debug] [-ErrorA...
Cmdlet      Get-BitsTransfer    Get-BitsTransfer [[-Name] <String[]>] [-AllUsers] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>] [-WarningActi...

描述
-----------
這個範例會示範如何限制匯入工作階段的模組成員,以及這個命令對於工作階段的作用。

第一個命令只會從 BitsTransfer 模組匯入 Add-BitsTransfer 和 Get-BitsTransfer Cmdlet。此命令會使用 Cmdlet 參數來限制模組所匯入的 Cmdlet。您也可以使用 Alias、Variable 和 Function 參數來限制模組所匯入的其他成員。

第二個命令會使用 Get-Module Cmdlet 來取得代表 BitsTransfer 模組的物件。ExportedCmdlets 屬性會列出模組所匯出的所有 Cmdlet,即使沒有全部匯入也一樣。

第三個命令會使用 Get-Command Cmdlet 的 Module 參數來取得已從 BitsTransfer 模組匯入的命令。結果確認只有匯入 Add-BitsTransfer 和 Get-BitsTransfer Cmdlet。






範例 6

C:\PS>import-module BitsTransfer -prefix PS -passthru

Name              : bitstransfer
Path              : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\bitstransfer\bitstransfer.psd1
Description       :
Guid              : 8fa5064b-8479-4c5c-86ea-0d311fe48875
Version           : 1.0.0.0
ModuleBase        : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\bitstransfer
ModuleType        : Manifest
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {[Add-BitsTransfer, Add-BitsTransfer], [Remove-BitsTransfer, Remove-BitsTransfer], [Complete-BitsTransfer, Complete-BitsTransfer]
                    , [Get-BitsTransfer, Get-BitsTransfer]...}
ExportedFunctions : {}
ExportedVariables : {}
NestedModules     : {Microsoft.BackgroundIntelligentTransfer.Management}


C:\PS> get-command -module bitstransfer

CommandType     Name                        Definition
-----------     ----                        ----------
Cmdlet          Add-PSBitsTransfer          Add-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Source] <String[]> ...
Cmdlet          Complete-PSBitsTransfer     Complete-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Verbose] [-Deb...
Cmdlet          Get-PSBitsTransfer          Get-PSBitsTransfer [[-Name] <String[]>] [-AllUsers] [-Verbose] ...
Cmdlet          Remove-PSBitsTransfer       Remove-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Verbose] [-Debug...
Cmdlet          Resume-PSBitsTransfer       Resume-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Asynchronous] [-...
Cmdlet          Set-PSBitsTransfer          Set-PSBitsTransfer [-BitsJob] <BitsJob[]> [-DisplayName <String...
Cmdlet          Start-PSBitsTransfer        Start-PSBitsTransfer [[-Source] <String[]>] [[-Destination] <St...
Cmdlet          Suspend-PSBitsTransfer      Suspend-PSBitsTransfer [-BitsJob] <BitsJob[]> [-Verbose] [-Debu...

描述
-----------
這些命令會將 BitsTransfer 模組匯入至目前的工作階段、將首碼新增至成員名稱,然後顯示加上首碼的成員名稱。

第一個命令會使用 Import-Module Cmdlet 匯入 BitsTransfer 模組,並使用 Prefix 參數將 PS 首碼新增至從模組匯入的所有成員,以及使用 PassThru 參數傳回表示已匯入之模組的模組物件。

此命令傳回的模組物件具有 ExportedCmdlets 屬性,它會列出已匯出的成員。首碼不會出現在 Cmdlet 名稱中,因為成員是在匯出之後 (但在匯入之前) 才套用首碼。

第二個命令會使用 Get-Command Cmdlet 取得已經從模組匯入的成員,並使用 Module 參數指定模組。輸出顯示模組成員都已正確加上首碼。

您所使用的首碼只會套用至目前工作階段中的成員,它並不會變更模組。






範例 7

C:\PS>get-module -list | format-table -property name, moduletype -auto

Name          ModuleType
----          ----------
Show-Calendar     Script
BitsTransfer    Manifest
PSDiagnostics   Manifest
TestCmdlets       Script

C:\PS> $a = import-module -name Show-Calendar -asCustomObject

C:\PS> $a | get-member 


   TypeName: System.Management.Automation.PSCustomObject

Name          MemberType   Definition
----          ----------   ----------
Equals        Method       bool Equals(System.Object obj)
GetHashCode   Method       int GetHashCode()
GetType       Method       type GetType()
ToString      Method       string ToString()
Show-Calendar ScriptMethod System.Object Show-Calendar();

C:\PS> $a."show-calendar"()

描述
-----------
這些命令會示範如何取得及使用 Import-Module 傳回的自訂物件。

自訂物件包括綜合成員,其代表每個已匯入的模組成員。例如,模組中的 Cmdlet 和函數會轉換成自訂物件的指令碼方法。

自訂物件在撰寫指令碼時非常有用。當匯入的多個物件具有相同名稱時,自訂物件也很有用。使用物件的指令碼方法等同於指定已匯入成員的完整名稱,包括其模組名稱。

AsCustomObject 參數只能與指令碼模組一起使用,因此首要工作是判斷哪個可用模組是指令碼模組。

第一個命令會使用 Get-Module Cmdlet 取得可用的模組,並使用管線運算子 (|) 將模組物件傳遞至 Format-Table Cmdlet,而此 Cmdlet 會將每個模組的 Name 和 ModuleType 列在一份表格中。

第二個命令會使用 Import-Module Cmdlet 匯入 Show-Calendar 指令碼模組,並使用 AsCustomObject 參數來要求自訂物件,再將產生的自訂物件儲存在 $a 變數中。

第三個命令會使用管線運算子將 $a 變數傳送給 Get-Member Cmdlet,此 Cmdlet 會取得 $a 中 PSCustomObject 的屬性和方法。輸出顯示 Show-Calendar 指令碼方法。

最後一個命令會使用 Show-Calendar 指令碼方法。因為方法名稱包含連字號,所以必須置於引號中。






範例 8

C:\PS>import-module BitsTransfer

C:\PS> import-module BitsTransfer -force -prefix PS

描述
-----------
這個範例會示範如何在您將模組重新匯入相同的工作階段時使用 Import-Module 的 Force 參數。

第一個命令會匯入 BitsTransfer 模組。第二個命令會再次匯入此模組,但這次會使用 Prefix 參數。

第二個命令也會包含 Force 參數,以便移除模組,然後再次匯入。如果沒有使用此參數,工作階段的每個 BitsTransfer Cmdlet 都會包含兩個複本:一個具有標準名稱,而另一個具有加上首碼的名稱。






範例 9

C:\PS>get-date

Saturday, September 12, 2009 6:47:04 PM

C:\PS> import-module TestModule

C:\PS> get-date
09255

C:\PS> get-command get-date | format-table -property commandtype, name, pssnapin, module -auto

CommandType  Name       pssnapin                       Module
-----------  ----       --------                       ------
   Function  Get-Date                                  TestModule
     Cmdlet  Get-Date   Microsoft.PowerShell.Utility


C:\PS> Microsoft.PowerShell.Utility\get-date

Saturday, September 12, 2009 6:33:23 PM

描述
-----------
這個範例會示範如何執行匯入之命令已經隱藏的命令。

第一個命令會執行 Windows PowerShell 隨附的 Get-Date Cmdlet。它會傳回具有目前日期的 DateTime 物件。

第二個命令會匯入 TestModule 模組。這個模組包含名為 Get-Date 的函數,可傳回 Julian 日期。

第三個命令會再次執行 Get-Date 命令。因為函數的優先順序高於 Cmdlet,所以系統會執行 TestModule 模組的 Get-Date 函數而非 Get-Date Cmdlet。

第四個命令顯示,工作階段中存在兩個 Get-Date 命令:TestModule 模組的函數以及 Microsoft.PowerShell.Utility 嵌入式管理單元的 Cmdlet。

第五個命令會使用嵌入式管理單元名稱來限定命令名稱,藉以執行隱藏的 Cmdlet。

如需 Windows PowerShell 中命令優先順序的詳細資訊,請參閱 about_command_precedence。






請參閱




目錄