Get-Module
取得已匯入或可匯入至目前會話的模組。
語法
Get-Module
[[-Name] <String[]>]
[-FullyQualifiedName <ModuleSpecification[]>]
[-All]
[<CommonParameters>]
Get-Module
[[-Name] <String[]>]
[-FullyQualifiedName <ModuleSpecification[]>]
[-ListAvailable]
[-Refresh]
-CimSession <CimSession>
[-CimResourceUri <Uri>]
[-CimNamespace <String>]
[<CommonParameters>]
Get-Module
[[-Name] <String[]>]
[-FullyQualifiedName <ModuleSpecification[]>]
[-ListAvailable]
[-Refresh]
-PSSession <PSSession>
[<CommonParameters>]
Get-Module
[[-Name] <String[]>]
[-FullyQualifiedName <ModuleSpecification[]>]
[-All]
[-ListAvailable]
[-Refresh]
[<CommonParameters>]
Description
Get-Module
Cmdlet 會取得已匯入或可匯入 PowerShell 工作階段的 PowerShell 模組。
Get-Module
傳回的module物件包含模組的重要資訊。
您也可以使用管線將模組對象傳送至其他 Cmdlet,例如 Import-Module
和 Remove-Module
Cmdlet。
如果沒有參數,Get-Module
會取得已匯入目前會話的模組。
若要取得所有已安裝的模組,請指定 ListAvailable 參數。
Get-Module
取得模組,但不會匯入模組。
從 Windows PowerShell 3.0 開始,當您在模組中使用命令時,模組會自動匯入,但 Get-Module
命令不會觸發自動匯入。
您也可以使用 Import-Module
Cmdlet 將模組匯入工作階段。
從 Windows PowerShell 3.0 開始,您可以取得然後從遠端工作階段將模組匯入本機會話。
此策略使用PowerShell的隱含遠端功能,相當於使用 Import-PSSession
Cmdlet。
當您在從另一個會話匯入的模組中使用命令時,命令會在遠端會話中隱含執行。 此功能可讓您從本機會話管理遠端電腦。
此外,從 Windows PowerShell 3.0 開始,您可以使用 Get-Module
和 Import-Module
來取得和匯入 Common Information Model (CIM) 模組,其中 Cmdlet 定義於 Cmdlet Definition XML (CDXML) 檔案中。
這項功能可讓您使用在非 Managed 程式代碼元件中實作的 Cmdlet,例如以 C++ 撰寫的 Cmdlet。
有了這些新功能,Get-Module
和 Import-Module
Cmdlet 會成為管理異質企業的主要工具,包括執行 Windows 操作系統的電腦,以及執行其他操作系統的計算機。
若要管理執行已啟用 PowerShell 和 PowerShell 遠端處理之 Windows 操作系統的遠端電腦,請在遠端電腦上建立 PSSession,然後使用 Get-Module
的 PSSession 參數,在 PSSession取得 PowerShell 模組。
當您匯入模組,然後使用目前會話中的匯入命令時,命令會在遠端電腦上的 PSSession 中隱含執行。
您可以使用此策略來管理遠端電腦。
您可以使用類似的策略來管理未啟用 PowerShell 遠端處理的電腦。 這些包括未執行 Windows 作業系統的電腦,以及已啟用 PowerShell 但未啟用 PowerShell 遠端的電腦。
從在遠端電腦上建立 CIM 工作階段開始。
CIM 會話是遠端電腦上的 Windows Management Instrumentation (WMI) 連線。
然後使用 Get-Module
CIMSession 參數,從 CIM 會話取得 CIM 模組。
當您使用 Import-Module
Cmdlet 匯入 CIM 模組,然後執行匯入的命令時,命令會在遠端電腦上隱含執行。
您可以使用此 WMI 和 CIM 策略來管理遠端電腦。
範例
範例 1:取得匯入目前會話的模組
Get-Module
此命令會取得已匯入目前會話的模組。
範例 2:取得已安裝的模組和可用的模組
Get-Module -ListAvailable
此命令會取得計算機上安裝的模組,並可匯入目前的會話。
Get-Module
尋找 $env:PSModulePath 環境變數所指定路徑中的可用模組。
如需 PSModulePath的詳細資訊,請參閱 about_Modules 和 about_Environment_Variables。
範例 3:取得所有導出的檔案
Get-Module -ListAvailable -All
此命令會取得所有可用模組的所有匯出檔案。
範例 4:依模組的完整名稱取得模組
$FullyQualifedName = @{ModuleName="Microsoft.PowerShell.Management";ModuleVersion="3.1.0.0"}
Get-Module -FullyQualifiedName $FullyQualifedName | Format-Table -Property Name,Version
Name Version
---- -------
Microsoft.PowerShell.Management 3.1.0.0
此命令會使用 FullyQualifiedName 參數來指定模組的完整名稱,以取得 Microsoft.PowerShell.Management 模組。
然後,命令會將結果傳送至 Format-Table
Cmdlet,將結果格式化為具有 Name 的數據表,並將 Version 當做數據行標題。
範例 5:取得模組的屬性
Get-Module | Get-Member -MemberType Property | Format-Table Name
Name
----
AccessMode
Author
ClrVersion
CompanyName
Copyright
Definition
Description
DotNetFrameworkVersion
ExportedAliases
ExportedCmdlets
ExportedCommands
ExportedFormatFiles
ExportedFunctions
ExportedTypeFiles
ExportedVariables
ExportedWorkflows
FileList
Guid
HelpInfoUri
LogPipelineExecutionDetails
ModuleBase
ModuleList
ModuleType
Name
NestedModules
OnRemove
Path
PowerShellHostName
PowerShellHostVersion
PowerShellVersion
PrivateData
ProcessorArchitecture
RequiredAssemblies
RequiredModules
RootModule
Scripts
SessionState
Version
此命令會取得 Get-Module
傳回 PSModuleInfo 對象的屬性。
每個模組檔案都有一個物件。
您可以使用 屬性來格式化和篩選模組物件。 如需屬性的詳細資訊,請參閱 PSModuleInfo 屬性。
輸出包括 Windows PowerShell 3.0 中引進的新屬性,例如 Author 和 CompanyName。
範例 6:依名稱分組所有模組
Get-Module -ListAvailable -All | Format-Table -Property Name, Moduletype, Path -Groupby Name
Name: AppLocker
Name ModuleType Path
---- ---------- ----
AppLocker Manifest C:\Windows\system32\WindowsPowerShell\v1.0\Modules\AppLocker\AppLocker.psd1
Name: Appx
Name ModuleType Path
---- ---------- ----
Appx Manifest C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Appx\en-US\Appx.psd1
Appx Manifest C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Appx\Appx.psd1
Appx Script C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Appx\Appx.psm1
Name: BestPractices
Name ModuleType Path
---- ---------- ----
BestPractices Manifest C:\Windows\system32\WindowsPowerShell\v1.0\Modules\BestPractices\BestPractices.psd1
Name: BitsTransfer
Name ModuleType Path
---- ---------- ----
BitsTransfer Manifest C:\Windows\system32\WindowsPowerShell\v1.0\Modules\BitsTransfer\BitsTransfer.psd1
此命令會取得所有模組檔案,包括匯入和可用,然後依模組名稱將它們分組。 這可讓您查看每個文本導出的模組檔案。
範例 7:顯示模組指令清單的內容
這些命令會顯示 Windows PowerShell BitsTransfer 模組的模組指令清單內容。
模組不需要有指令清單檔。 當它們有指令清單檔時,只需要包含版本號碼,指令清單檔案。 不過,指令清單檔案通常會提供模組、其需求和內容的相關實用資訊。
# First command
$m = Get-Module -list -Name BitsTransfer
# Second command
Get-Content $m.Path
@ {
GUID = "{8FA5064B-8479-4c5c-86EA-0D311FE48875}"
Author = "Microsoft Corporation"
CompanyName = "Microsoft Corporation"
Copyright = "Microsoft Corporation. All rights reserved."
ModuleVersion = "1.0.0.0"
Description = "Windows PowerShell File Transfer Module"
PowerShellVersion = "2.0"
CLRVersion = "2.0"
NestedModules = "Microsoft.BackgroundIntelligentTransfer.Management"
FormatsToProcess = "FileTransfer.Format.ps1xml"
RequiredAssemblies = Join-Path $psScriptRoot "Microsoft.BackgroundIntelligentTransfer.Management.Interop.dll"
}
第一個命令會取得代表 BitsTransfer 模組的 PSModuleInfo 物件。 它會將物件儲存在 $m
變數中。
第二個命令會使用 Get-Content
Cmdlet 來取得指定路徑中指令清單檔的內容。 它會使用點表示法來取得指令清單檔案的路徑,該檔案會儲存在物件的 Path 屬性中。 輸出會顯示模組指令清單的內容。
範例 8:列出模組目錄中的檔案
dir (Get-Module -ListAvailable FileTransfer).ModuleBase
Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules\FileTransfer
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/16/2008 12:36 PM en-US
-a--- 11/19/2008 11:30 PM 16184 FileTransfer.Format.ps1xml
-a--- 11/20/2008 11:30 PM 1044 FileTransfer.psd1
-a--- 12/16/2008 12:20 AM 108544 Microsoft.BackgroundIntelligentTransfer.Management.Interop.dll
此命令會列出模組目錄中的檔案。 這是在匯入模組之前判斷模組內容的另一種方式。 某些模組可能有描述模組的說明檔或自述檔。
範例 9:取得計算機上安裝的模組
$s = New-PSSession -ComputerName Server01
Get-Module -PSSession $s -ListAvailable
這些命令會取得安裝在 Server01 計算機上的模組。
第一個命令會使用 New-PSSession
Cmdlet,在 Server01 計算機上建立 PSSession。 命令會將 PSSession 儲存在 $s 變數中。
第二個命令會使用 PSSession 和 ListAvailableGet-Module
參數,以取得$s變數中 PSSession 中的模組。
如果您使用管線將模組從其他會話傳送至 Import-Module
Cmdlet,Import-Module
使用隱含遠端功能將模組匯入目前的會話。
這相當於使用 Import-PSSession
Cmdlet。
您可以在目前的會話中使用模組中的 Cmdlet,但使用這些 Cmdlet 的命令實際上會執行遠端會話。
如需詳細資訊,請參閱 Import-Module
和 Import-PSSession
。
範例 10:管理未執行 Windows 作業系統的電腦
此範例中的命令可讓您管理未執行 Windows 作業系統之遠端電腦的儲存系統。 在此範例中,因為計算機的系統管理員已安裝模組探索 WMI 提供者,因此 CIM 命令可以使用針對提供者設計的預設值。
$cs = New-CimSession -ComputerName RSDGF03
Get-Module -CimSession $cs -Name Storage | Import-Module
Get-Command Get-Disk
CommandType Name ModuleName
----------- ---- ----------
Function Get-Disk Storage
Get-Disk
Number Friendly Name OperationalStatus Total Size Partition Style
------ ------------- ----------------- ---------- ---------------
0 Virtual HD ATA Device Online 40 GB MBR
第一個命令會使用 New-CimSession
Cmdlet 在 RSDGF03遠端電腦上建立會話。 會話會連線到遠端電腦上的 WMI。 命令會將 CIM 會話儲存在 $cs
變數中。
第二個命令會使用 $cs
變數中的 CIM 工作階段,在RSDGF03電腦上執行 Get-Module
命令。 此命令會使用 Name 參數來指定記憶體模組。 命令會使用管線運算符 (|) 將記憶體模組傳送至 Import-Module
Cmdlet,以將它匯入本機會話。
第三個命令會在記憶體模組的 Get-Disk
命令上執行 Get-Command
Cmdlet。
當您將 CIM 模組匯入本機會話時,PowerShell 會將代表 CIM 模組的 CDXML 檔案轉換成 PowerShell 腳本,其會顯示為本機會話中的函式。
第四個命令會執行 Get-Disk
命令。 雖然命令是在本機會話中輸入,但它會在匯入它的遠端電腦上隱含執行。 命令會從遠端電腦取得物件,並將其傳回至本機會話。
參數
-All
指出此 Cmdlet 會取得每個模組資料夾中的所有模組,包括巢狀模組、指令清單 (.psd1) 檔案、腳本模組 (.psm1) 檔案,以及二進位模組 (.dll) 檔案。
如果沒有此參數,Get-Module
只會取得每個模組資料夾中的預設模組。
類型: | SwitchParameter |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-CimNamespace
指定公開 CIM 模組之替代 CIM 提供者的命名空間。 預設值是模組探索 WMI 提供者的命名空間。
使用此參數從未執行 Windows 作業系統的電腦和裝置取得 CIM 模組。
此參數是在 Windows PowerShell 3.0 中引進的。
類型: | String |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-CimResourceUri
指定 CIM 模組的替代位置。 預設值是遠端電腦上模組探索 WMI 提供者的資源 URI。
使用此參數從未執行 Windows 作業系統的電腦和裝置取得 CIM 模組。
此參數是在 Windows PowerShell 3.0 中引進的。
類型: | Uri |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-CimSession
指定遠端電腦上的 CIM 工作階段。 輸入包含 CIM 作業階段的變數或取得 CIM 工作階段的命令,例如 Get-CimSession 命令。
Get-Module
使用 CIM 會話連線從遠端電腦取得模組。
當您使用 Import-Module
Cmdlet 匯入模組,並使用目前工作階段中匯入模組的命令時,命令實際上會在遠端電腦上執行。
您可以使用此參數,從未執行 Windows 作業系統的電腦和裝置,以及具有 PowerShell 但未啟用 PowerShell 遠端功能的電腦取得模組。
類型: | CimSession |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | False |
接受萬用字元: | False |
-FullyQualifiedName
以 ModuleSpecification 物件的形式指定模組的名稱。 MSDN 連結庫中 ModuleSpecification 建構函式 (Hashtable) 的一節會說明這些物件。 例如,FullyQualifiedName 參數會接受以下列格式指定的模組名稱:
- @{ModuleName = “modulename”;ModuleVersion = “version_number”}
- @{ModuleName = “modulename”;ModuleVersion = “version_number”;Guid = “GUID”}
需要 ModuleName 和 ModuleVersion,但 Guid 是選擇性的。
您不能在與 Name 參數相同的命令中指定 FullyQualifiedName 參數。
類型: | ModuleSpecification[] |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | True |
接受萬用字元: | False |
-ListAvailable
表示此 Cmdlet 會取得所有已安裝的模組。
Get-Module
會取得 PSModulePath 環境變數中所列路徑中的模組。
如果沒有此參數,Get-Module
只會取得 PSModulePath 環境變數中所列的模組,以及載入目前會話中的模組。
ListAvailable 不會傳回 PSModulePath 環境變數中找不到之模組的相關信息,即使這些模組是在目前的會話中載入也一樣。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Name
指定此 Cmdlet 取得之模組的名稱或名稱模式。
允許通配符。
您也可以使用管線將名稱傳送至 Get-Module
。
您不能在與 Name 參數相同的命令中指定 FullyQualifiedName 參數。
名稱 無法接受模組 GUID 做為值。 若要指定 GUID 來傳回模組,請改用 FullyQualifiedName。
類型: | String[] |
Position: | 0 |
預設值: | None |
必要: | False |
接受管線輸入: | True |
接受萬用字元: | True |
-PSSession
取得指定使用者管理的 PowerShell 工作階段中的模組(PSSession)。
輸入包含會話的變數、取得會話的命令,例如 Get-PSSession
命令,或建立會話的命令,例如 New-PSSession
命令。
當會話連線到遠端電腦時,您必須指定 ListAvailable 參數。
使用 PSSession 參數的 Get-Module
命令相當於使用 Invoke-Command
Cmdlet 在 PSSession中執行 Get-Module -ListAvailable
命令。
此參數是在 Windows PowerShell 3.0 中引進的。
類型: | PSSession |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | False |
接受萬用字元: | False |
-Refresh
指出此 Cmdlet 會重新整理已安裝命令的快取。
命令快取會在會話啟動時建立。
它可讓 Get-Command
Cmdlet 從未匯入至會話的模組取得命令。
此參數是針對模組內容自會話啟動后變更的開發和測試案例所設計。
當您在命令中指定 Refresh 參數時,您必須指定 ListAvailable。
此參數是在 Windows PowerShell 3.0 中引進的。
類型: | SwitchParameter |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
輸入
您可以使用管線將模組名稱傳送至此 Cmdlet。
輸出
此 Cmdlet 會傳回代表模組的物件。
當您指定
備註
從 Windows PowerShell 3.0 開始,PowerShell 中包含的核心命令會封裝在模組中。 例外狀況是 Microsoft.PowerShell.Core,這是嵌入式管理單元(PSSnapin)。 根據預設,只會將 Microsoft.PowerShell.Core 嵌入式管理單元新增至會話。 模組會在第一次使用時自動匯入,您可以使用
Import-Module
Cmdlet 來匯入模組。從 Windows PowerShell 3.0 開始,隨 PowerShell 一起安裝的核心命令會封裝在模組中。 在 Windows PowerShell 2.0 和在更新版本的 PowerShell 中建立舊式會話的主機程式中,核心命令會封裝在嵌入式管理單元中(PSSnapins)。 例外狀況是 Microsoft.PowerShell.Core,這一定是嵌入式管理單元。 此外,遠端會話,例如由
New-PSSession
Cmdlet 啟動的會話,是包含核心嵌入式管理單元的較舊樣式會話。如需使用核心模組建立較新樣式會話 CreateDefault2 方法的相關信息,請參閱 MSDN 連結庫中的 CreateDefault2 方法。
Get-Module
只會取得儲存在 PSModulePath 環境變數值位置的模組($env:PSModulePath)。 您可以使用Import-Module
Cmdlet 的 Path 參數匯入其他位置的模組,但無法使用Get-Module
Cmdlet 來取得模組。此外,從 PowerShell 3.0 開始,新的屬性已新增至 物件,
Get-Module
傳回,讓即使在匯入模組之前,也更容易瞭解模組。 匯入之前會填入所有屬性。 其中包括 ExportedCommands、ExportedCmdlets 和 ExportedFunctions 列出模組導出命令的屬性。ListAvailable 參數只會取得格式正確的模組,也就是包含至少一個基底名稱與模組資料夾名稱相同之檔案的資料夾。 基底名稱是沒有擴展名的名稱。 包含不同名稱之檔案的資料夾會被視為容器,但不包含模組。
若要取得實作為 .dll 檔案但未包含在模組資料夾中的模組,請同時指定 ListAvailable 和 All 參數。
若要使用 CIM 會話功能,遠端計算機必須具有 WS-Management 遠端處理和 Windows Management Instrumentation (WMI),這是通用資訊模型 (CIM) 標準的Microsoft實作。 計算機也必須有模組探索 WMI 提供者,或具有相同基本功能的替代 WMI 提供者。
您可以在未執行 Windows 作業系統和具有 PowerShell 但未啟用 PowerShell 遠端功能的 Windows 電腦上,使用 CIM 工作階段功能。
您也可以使用 CIM 參數,從已啟用 PowerShell 遠端處理的電腦取得 CIM 模組。 這包括本機計算機。 當您在本機計算機上建立 CIM 工作階段時,PowerShell 會使用 DCOM,而不是 WMI 來建立工作階段。