Get-Module

列出在目前會話中匯入的模組,或可從 PSModulePath 匯入的模組。

Syntax

Get-Module
   [[-Name] <String[]>]
   [-FullyQualifiedName <ModuleSpecification[]>]
   [-All]
   [<CommonParameters>]
Get-Module
   [[-Name] <String[]>]
   [-FullyQualifiedName <ModuleSpecification[]>]
   [-All]
   [-ListAvailable]
   [-PSEdition <String>]
   [-SkipEditionCheck]
   [-Refresh]
   [<CommonParameters>]
Get-Module
   [[-Name] <String[]>]
   [-FullyQualifiedName <ModuleSpecification[]>]
   [-ListAvailable]
   [-PSEdition <String>]
   [-SkipEditionCheck]
   [-Refresh]
   -PSSession <PSSession>
   [<CommonParameters>]
Get-Module
   [[-Name] <String[]>]
   [-FullyQualifiedName <ModuleSpecification[]>]
   [-ListAvailable]
   [-SkipEditionCheck]
   [-Refresh]
   -CimSession <CimSession>
   [-CimResourceUri <Uri>]
   [-CimNamespace <String>]
   [<CommonParameters>]

Description

Cmdlet Get-Module 會列出已匯入或可匯入 PowerShell 會話的 PowerShell 模組。 如果沒有參數, Get-Module 取得已匯入至目前會話的模組。 ListAvailable 參數可用來列出可從 PSModulePath 環境變數 ($env:PSModulePath) 中指定的路徑匯入的模組。

傳回的module物件 Get-Module 包含模組的重要資訊。 您也可以使用管線將模組對象傳送至其他 Cmdlet,例如 Import-ModuleRemove-Module Cmdlet。

Get-Module 會列出模組,但不會匯入模組。 從 Windows PowerShell 3.0 開始,當您在模組中使用命令時,模組會自動匯入,但 Get-Module 命令不會觸發自動匯入。 您也可以使用 Import-Module Cmdlet 將模組匯入工作階段。

從 Windows PowerShell 3.0 開始,您可以取得然後從遠端工作階段將模組匯入本機會話。 此策略使用PowerShell的隱含遠端功能,相當於使用 Import-PSSession Cmdlet。 當您在從另一個會話匯入的模組中使用命令時,命令會在遠端會話中隱含執行。 此功能可讓您從本機會話管理遠端電腦。

此外,從 Windows PowerShell 3.0 開始,您可以使用 Get-ModuleImport-Module 來取得和匯入 Common Information Model (CIM) 模組。 CIM 模組會在 Cmdlet 定義 XML (CDXML) 檔案中定義 Cmdlet。 這項功能可讓您使用在非 Managed 程式代碼元件中實作的 Cmdlet,例如以 C++ 撰寫的 Cmdlet。

隱含遠端處理可用來管理已啟用PowerShell遠端功能的遠端電腦。 在遠端電腦上建立 PSSession,然後使用 Get-Module PSSession 參數取得遠端會話中的 PowerShell 模組。 當您從遠端會話匯入模組時,匯入的命令會在遠端電腦上的會話中執行。

您可以使用類似的策略來管理未啟用 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_Modulesabout_Environment_Variables

範例 3:取得所有導出的檔案

Get-Module -ListAvailable -All

此命令會取得所有可用模組的所有匯出檔案。

範例 4:依模組的完整名稱取得模組

$FullyQualifiedName = @{ModuleName="Microsoft.PowerShell.Management";ModuleVersion="3.1.0.0"}
Get-Module -FullyQualifiedName $FullyQualifiedName | Format-Table -Property Name,Version

Name                             Version
----                             -------
Microsoft.PowerShell.Management  3.1.0.0

這個範例會使用 FullyQualifiedName 參數指定模組的完整名稱,以取得 Microsoft.PowerShell.Management 模組。 接著,命令會將結果傳送至 Format-Table Cmdlet,將結果格式化為名稱版本為數據行標題的數據表

在模組的完整名稱中,ModuleVersion會作為最低版本。 因此,在此範例中,它會比對任何版本或更新版本的 3.1.0.0 Microsoft.PowerShell.Management 模組。

範例 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

此命令會取得傳回之 PSModuleInfo 對象的 Get-Module 屬性。 每個模組檔案都有一個物件。

您可以使用 屬性來格式化和篩選模組物件。 如需屬性的詳細資訊,請參閱 PSModuleInfo 屬性

輸出包含 Windows PowerShell 3.0 中引進的新屬性,例如 AuthorCompanyName

範例 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

第二個命令會使用 的 PSSessionListAvailable 參數Get-Module,在 變數的 PSSession$s取得模組。

如果您使用管線將模組從其他工作階段傳送至 Import-Module Cmdlet, Import-Module 請使用隱含遠端功能將模組匯入目前的作業階段。 這相當於使用 Import-PSSession Cmdlet。 您可以在目前的會話中使用模組中的 Cmdlet,但使用這些 Cmdlet 的命令實際上會執行遠端會話。 如需詳細資訊,請參閱 Import-ModuleImport-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

第二個Get-Module命令會使用 變數中的 $cs CIM 工作階段,在RSDGF03電腦上執行命令。 此命令會使用 Name 參數來指定 儲存體 模組。 命令會使用管線運算符 (|) 將 儲存體 模組傳送至 Import-Module Cmdlet,該 Cmdlet 會將它匯入本機會話。

第三個命令會在 Get-Command 儲存體 模組的 命令上Get-Disk執行 Cmdlet。 當您將 CIM 模組匯入本機會話時,PowerShell 會將代表 CIM 模組的 CDXML 檔案轉換成 PowerShell 腳本,其會顯示為本機會話中的函式。

第四個命令會 Get-Disk 執行 命令。 雖然命令是在本機會話中輸入,但它會在匯入它的遠端電腦上隱含執行。 命令會從遠端電腦取得物件,並將其傳回至本機會話。

參數

-All

指出此 Cmdlet 會取得每個模組資料夾中的所有模組,包括巢狀模組、指令清單 (.psd1) 檔案、腳本模組 (.psm1) 檔案和二進位模組 (.dll) 檔案。 如果沒有此參數, Get-Module 則只會取得每個模組資料夾中的預設模組。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CimNamespace

指定公開 CIM 模組之替代 CIM 提供者的命名空間。 預設值是模組探索 WMI 提供者的命名空間。

使用此參數從未執行 Windows 作業系統的電腦和裝置取得 CIM 模組。

此參數是在 Windows PowerShell 3.0 中引進的。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CimResourceUri

指定 CIM 模組的替代位置。 預設值是遠端電腦上模組探索 WMI 提供者的資源 URI。

使用此參數從未執行 Windows 作業系統的電腦和裝置取得 CIM 模組。

此參數是在 Windows PowerShell 3.0 中引進的。

Type:Uri
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CimSession

指定遠端電腦上的 CIM 工作階段。 輸入包含 CIM 會話的變數,或取得 CIM 工作階段的命令,例如 Get-CimSession 命令。

Get-Module 會使用 CIM 會話連線從遠端電腦取得模組。 當您使用 Import-Module Cmdlet 匯入模組並使用目前工作階段中匯入模組的命令時,命令實際上會在遠端電腦上執行。

您可以使用此參數,從未執行 Windows 作業系統的電腦和裝置,以及具有 PowerShell 但未啟用 PowerShell 遠端功能的電腦取得模組。

CimSession 參數會取得 CIMSession 中的所有模組。 不過,您只能匯入以 CIM 為基礎的和 Cmdlet 定義 XML (CDXML) 模組。

Type:CimSession
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-FullyQualifiedName

此值可以是模組名稱、完整模組規格或模組檔案的路徑。

當值為路徑時,路徑可以是完整或相對路徑。 相對於包含 using 語句的腳本,會解析相對路徑。

當值是名稱或模組規格時,PowerShell 會 搜尋 PSModulePath 中的指定模組。

模組規格是具有下列索引鍵的哈希表。

  • ModuleName - 必要 指定模組名稱。
  • GUID - 選擇性 指定模組的 GUID。
  • 也必須指定下列三個索引鍵中的至少一個。
    • ModuleVersion - 指定模組的最低可接受的版本。
    • MaximumVersion - 指定模組的最大可接受的版本。
    • RequiredVersion - 指定模組的確切必要版本。 這無法與其他版本金鑰搭配使用。

您無法在與 Name 參數相同的命令中指定 FullyQualifiedName 參數。

Type:ModuleSpecification[]
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ListAvailable

表示此 Cmdlet 會取得所有已安裝的模組。 Get-Module會取得 PSModulePath 環境變數所列路徑中的模組。 如果沒有此參數,Get-Module則只會取得 PSModulePath 環境變數中同時列出的模組,以及載入目前會話中的模組。 ListAvailable 不會傳回 PSModulePath 環境變數中找不到之模組的相關信息,即使這些模組是在目前的會話中載入也一樣。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

指定此 Cmdlet 取得之模組的名稱或名稱模式。 允許通配符。 您也可以使用管線將名稱傳送至 Get-Module。 您無法在與 Name 參數相同的命令中指定 FullyQualifiedName 參數。

名稱 無法接受模組 GUID 做為值。 若要藉由指定 GUID 傳回模組,請改用 FullyQualifiedName

Type:String[]
Position:0
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:True

-PSEdition

取得支援指定之 PowerShell 版本的模組。

此參數可接受的值為:

  • Desktop
  • Core

Cmdlet Get-Module 會檢查 PSModuleInfo 物件的 CompatiblePSEditions 屬性是否有指定的值,並只傳回已設定的模組。

注意

  • Desktop Edition︰建置在 .NET Framework 上,並與 Server Core 和 Windows Desktop 等完整版 Windows 上執行之目標 PowerShell 版本的指令碼和模組相容。
  • Core Edition︰建置在 .NET Core 上,並與 Nano Server 和 Windows IoT 等縮減版 Windows 上執行之目標 PowerShell 版本的指令碼和模組相容。
Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PSSession

取得指定使用者管理的 PowerShell 工作階段 (PSSession) 中的模組。 輸入包含會話的變數、取得會話的命令,例如 Get-PSSession 命令,或建立會話的命令,例如 New-PSSession 命令。

當會話連線到遠端電腦時,您必須指定 ListAvailable 參數。

Get-Module使用 PSSession 參數的命令相當於使用 Invoke-Command Cmdlet 在 PSSession執行Get-Module -ListAvailable命令。

此參數是在 Windows PowerShell 3.0 中引進的。

Type:PSSession
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Refresh

指出此 Cmdlet 會重新整理已安裝命令的快取。 命令快取會在會話啟動時建立。 它可讓 Get-Command Cmdlet 從未匯入至工作階段的模組取得命令。

此參數是針對模組內容自會話啟動后變更的開發和測試案例所設計。

當您在命令中指定 Refresh 參數時,必須指定 ListAvailable

此參數是在 Windows PowerShell 3.0 中引進的。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipEditionCheck

略過 [CompatiblePSEditions] 字段的檢查。

根據預設,Get-Module省略目錄中未在 CompatiblePSEditions 字段中指定的Core模組%windir%\System32\WindowsPowerShell\v1.0\Modules。 設定此參數時,會包含不含 Core 的模組,因此會傳回與 PowerShell v6 和更新版本不相容之 Windows PowerShell 模組路徑下的模組。

在macOS和Linux上,此參數不會執行任何動作。

如需詳細資訊,請參閱 about_PowerShell_Editions

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

String

您可以使用管線將模組名稱傳送至此 Cmdlet。

輸出

PSModuleInfo

此 Cmdlet 會傳回代表模組的物件。 當您指定 ListAvailable 參數時, Get-Module傳回 ModuleInfoGrouping 物件,這是具有相同屬性和方法的 PSModuleInfo 物件類型。

備註

PowerShell 包含下列的 Get-Module別名:

  • 所有平臺:

    • gmo
  • 從 Windows PowerShell 3.0 開始,PowerShell 中包含的核心命令會封裝在模組中。 例外狀況是 Microsoft.PowerShell.Core,這是嵌入式管理單元(PSSnapin)。 根據預設,只有 Microsoft.PowerShell.Core 嵌入式管理單元會新增至會話。 模組會在第一次使用時自動匯入,而您可以使用 Import-Module Cmdlet 來匯入模組。

  • 在 Windows PowerShell 2.0 中,以及在更新版本的 PowerShell 中建立舊式會話的主機程式中,核心命令會封裝在嵌入式管理單元中(PSSnapins)。 例外狀況是 Microsoft.PowerShell.Core,一律是嵌入式管理單元。 此外,遠端會話,例如 Cmdlet 所 New-PSSession 啟動的工作階段,是包含核心嵌入式管理單元的較舊樣式會話。

    如需使用核心模組建立較新樣式會話的 CreateDefault2 方法相關信息,請參閱 CreateDefault2 方法

  • Get-Module只會取得儲存在 PSModulePath 環境變數值 ($env:PSModulePath) 位置的模組。 Cmdlet Import-Module 可以在其他位置匯入模組,但您無法使用 Get-Module Cmdlet 來取得模組。

  • 此外,從 PowerShell 3.0 開始,新的屬性已新增至 物件, Get-Module 該物件會傳回 ,讓即使在匯入模組之前,也更容易了解模組。 匯入之前會填入所有屬性。 其中包括 ExportedCommandsExportedCmdlets 和 ExportedFunctions 屬性,這些屬性會列出模組導出的命令。

  • ListAvailable 參數只會取得格式正確的模組,也就是包含至少一個基底名稱與模組資料夾名稱相同之檔案的資料夾。 基底名稱是沒有擴展名的名稱。 包含不同名稱之檔案的資料夾會被視為容器,但不包含模組。

    若要取得實作為 DLL 檔案但未包含在模組資料夾中的模組,請同時指定 ListAvailableAll 參數。

  • 若要使用 CIM 會話功能,遠端計算機必須具有 WS-Management 遠端處理和 Windows Management Instrumentation (WMI),這是 Microsoft 實作通用資訊模型 (CIM) 標準。 計算機也必須有模組探索 WMI 提供者,或具有相同基本功能的替代 WMI 提供者。

    您可以在未執行 Windows 作業系統和具有 PowerShell 但未啟用 PowerShell 遠端功能的 Windows 電腦上,使用 CIM 工作階段功能。

    您也可以使用 CIM 參數,從已啟用 PowerShell 遠端處理的電腦取得 CIM 模組。 這包括本機計算機。 當您在本機計算機上建立 CIM 工作階段時,PowerShell 會使用 DCOM,而不是 WMI 來建立工作階段。