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) 。

傳回的模組物件 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-ModulePSSession參數取得遠端會話中的 PowerShell 模組。 當您從遠端會話匯入模組時,匯入的命令會在遠端電腦上的會話中執行。

您可以使用類似的策略來管理未啟用 PowerShell 遠端處理的電腦。 這些包括未執行 Windows 作業系統的電腦,以及已啟用 PowerShell 但未啟用 PowerShell 遠端的電腦。

從在遠端電腦上建立 CIM 會話開始。 CIM 會話是遠端電腦上的 Windows Management Instrumentation (WMI) 連線。 然後使用 的 Get-ModuleCIMSession參數,從 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:依模組的完整名稱取得模組

$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,將結果格式化為 具有 NameVersion 做為資料行標題的資料表。

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

第二個命令會使用 的 Get-ModulePSSessionListAvailable參數來取得變數中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 參數指定 Storage 模組。 此命令會使用管線運算子 (|) 將儲存體模組傳送至 Import-Module 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 會話連線從遠端電腦取得模組。 當您使用 Cmdlet 匯入模組並使用 Import-Module 目前會話中匯入模組的命令時,命令實際上會在遠端電腦上執行。

您可以使用此參數,從未執行 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

ModuleSpecification 物件的形式指定名稱的模組。 請參閱 ModuleSpecification 建構函式 (雜湊表) 的一節。

例如, FullyQualifiedModule 參數接受以下列其中一種格式指定的模組名稱:

  • @{ModuleName = "modulename"; ModuleVersion = "version_number"}
  • @{ModuleName = "modulename"; ModuleVersion = "version_number"; Guid = "GUID"}

ModuleNameModuleVersion 是必要參數,但 Guid 是選擇性參數。 您無法在與Module參數相同的命令中指定FullyQualifiedModule參數。 這兩個參數互斥。

注意

此參數也接受更簡單形式的輸入:

  • 模組名稱
  • 模組的完整路徑
  • 模組的相對路徑。 在腳本中使用時,相對路徑會解析為相對於腳本檔案位置的完整路徑。
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 上,與在完整使用量的 Windows 版本 (如 Server Core 和 Windows Desktop) 上執行的 PowerShell 指令碼和模組目標版本相容相容。
  • Core Edition: 建置在 .NET Core 上,與在降低使用量的 Windows 版本 (如 Nano Server 和 Windows IoT) 上執行的 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 物件類型。

備註

  • 從 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 讓即使在匯入模組之前也更容易瞭解模組。 匯入之前會填入所有屬性。 其中包括 ExportedCommandsExportedCmdletsExportedFunctions 屬性,這些屬性會列出模組匯出的命令。

  • 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 來建立會話。