Get-Module

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

語法

Loaded (預設值)

Get-Module
    [[-Name] <String[]>]
    [-FullyQualifiedName <ModuleSpecification[]>]
    [-All]
    [<CommonParameters>]

Available

Get-Module
    [[-Name] <String[]>]
    [-FullyQualifiedName <ModuleSpecification[]>]
    [-All]
    [-ListAvailable]
    [-PSEdition <String>]
    [-SkipEditionCheck]
    [-Refresh]
    [<CommonParameters>]

PsSession

Get-Module
    [[-Name] <String[]>]
    -PSSession <PSSession>
    [-FullyQualifiedName <ModuleSpecification[]>]
    [-ListAvailable]
    [-PSEdition <String>]
    [-SkipEditionCheck]
    [-Refresh]
    [<CommonParameters>]

CimSession

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

Description

該 Get-Module cmdlet 列出已匯入或可匯入 PowerShell 會話的 PowerShell 模組。 沒有參數的話, Get-Module 會拿到已經匯入到目前會話的模組。 ListAvailable 參數用於列出可從 PSModulePath 環境變數$Env:PSModulePath()中指定的路徑匯入的模組。

回 Get-Module 傳的模組物件包含關於該模組的重要資訊。 你也可以將模組物件管道連接到其他指令清單,例如 和 Import-ModuleRemove-Module 指令清單。

Get-Module 它列出模組,但不會匯入它們。 從 Windows PowerShell 3.0 開始,模組在使用指令時會自動匯入,但 Get-Module 指令不會觸發自動匯入。 你也可以用 Import-Module cmdlet 把模組匯入你的工作階段。

從 Windows PowerShell 3.0 開始,你可以取得並從遠端工作階段匯入模組到本地工作階段。 此策略使用 PowerShell 的隱式遠端處理功能,等同於使用 Import-PSSession cmdlet。 當你在模組中使用從其他會話匯入的指令時,這些指令會在遠端會話中隱含執行。 這個功能讓你能從本地會話管理遠端電腦。

此外,從 PowerShell 3.0 Windows開始,你可以使用 Get-Module 和 Import-Module 來取得並匯入通用資訊模型(CIM)模組。 CIM 模組在 Cmdlet 定義 XML(CDXML)檔案中定義 cmdlet。 此功能允許你使用在非受管程式碼組合中實作的 cmdlet,例如以 C++ 撰寫的程式碼。

隱式遠端處理可用來管理啟用 PowerShell 遠端處理的遠端電腦。 在遠端電腦建立一個 PSSession ,然後使用 PSSessionGet-Module 參數來取得遠端工作階段中的 PowerShell 模組。 當你從遠端工作階段匯入模組時,匯入的指令會在遠端電腦的會話中執行。

你也可以用類似策略管理未啟用 PowerShell 遠端管理的電腦。 這些包括未執行 Windows 作業系統的電腦,以及安裝 PowerShell 但未啟用 PowerShell 遠端管理的電腦。

首先在遠端電腦建立一個 CIM 會話。 CIM 會話是連接遠端電腦上的 Windows 管理儀器(WMI)。 接著使用 CimSessionGet-Module 參數從 CIM 會話取得 CIM 模組。 當你用 Import-Module cmdlet 匯入 CIM 模組,然後執行匯入的指令時,指令會在遠端電腦上隱含執行。 你可以利用這種 WMI 和 CIM 策略來管理遠端電腦。

範例

範例 1:將模組匯入目前的 session

Get-Module

這個指令會接收已匯入到當前會話中的模組。

範例二:安裝模組與可用模組

Get-Module -ListAvailable

此指令取得已安裝在電腦上的模組,並可匯入目前的會話。

Get-Module 尋找由 $Env:PSModulePath 環境變數指定路徑中的可用模組。 欲了解更多關於 PSModulePath 的資訊,請參閱 about_Modules 和 about_Environment_Variables。

範例三:取得所有匯出檔案

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

這個例子有Microsoft。PowerShell.Management 模組透過使用 FullyQualifiedName參數指定模組的完整限定名稱。 指令接著將結果 Format-Table 輸入指令碼,將結果格式化為表格,欄位標題為 Name( 名稱 )和 版本(Version )。

在模組的完全限定名稱中,值 ModuleVersion 作為最小版本。 所以,在這個例子中,它匹配任何Microsoft。PowerShell.Management 版本為 3.1.0.0 或以上的模組。

範例 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-ModulePSModuleInfo 物件的屬性。 每個模組檔案都有一個物件。

你可以用屬性來格式化和篩選模組物件。 欲了解更多相關資訊,請參閱 PSModuleInfo Properties。

輸出包含了 PowerShell 3.0 引入的新屬性,例如 Author 和 CompanyName,這些都是在 PowerShell 3.0 Windows 中引入的。

範例 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 取得指定路徑中 manifest 檔案的內容。 它使用 dot 符號來取得清單檔案的路徑,該檔案儲存在物件的 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

此指令會列出模組目錄中的檔案。 這是另一種在匯入模組前判斷模組內容的方法。 有些模組可能包含說明檔或 ReadMe 檔案來描述該模組。

範例 9:在電腦上安裝模組

$s = New-PSSession -ComputerName Server01

Get-Module -PSSession $s -ListAvailable

這些指令會取得安裝在 Server01 電腦上的模組。

第一個指令使用 New-PSSession cmdlet 在 Server01 電腦上建立 PSSession 。 指令會將 PSSession 儲存在變數中 $s 。

第二個指令使用 PSSessionGet-Module 和 ListAvailable 參數,將 PSSession 中的模組放入$s變數。

如果你從其他 session 把模組導到 Import-Module cmdlet,然後 Import-Module 用隱式遠端功能把模組匯入目前的 session。 這等同於使用 Import-PSSession 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-CommandGet-Disk儲存模組中的指令。 當你將 CIM 模組匯入本地會話時,PowerShell 會將代表 CIM 模組的 CDXML 檔案轉換成 PowerShell 腳本,這些腳本會顯示為本地會話中的函式。

第四個指令執行該 Get-Disk 指令。 雖然指令是在本地會話中輸入,但它會在匯入的遠端電腦上隱含執行。 指令從遠端電腦取得物件並返回本地會話。

參數

-All

表示此 cmdlet 會取得每個模組資料夾中的所有模組,包括巢狀模組、manifest (.psd1) 檔案、script module (.psm1) 檔案,以及二進位模組 (.dll) 檔案。 若無此參數, Get-Module 則只會在每個模組資料夾中取得預設模組。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

Loaded
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
Available
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-CimNamespace

指定一個替代 CIM 提供者的命名空間,該提供者可暴露 CIM 模組。 預設值為模組發現 WMI 提供者的命名空間。

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

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

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False

參數集

CimSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-CimResourceUri

指定CIM模組的替代位置。 預設值為遠端電腦模組發現 WMI 提供者的資源 URI。

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

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

參數屬性

類型:Uri
預設值:None
支援萬用字元:False
不要顯示:False

參數集

CimSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-CimSession

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

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

你可以利用這個參數從未執行 Windows 作業系統的電腦和裝置取得模組,以及那些有 PowerShell 但未啟用 PowerShell 遠端管理的電腦。

CimSession 參數會取得 CIMSession 中的所有模組。 然而,你只能匯入基於 CIM 及基於 Cmdlet 定義 XML(CDXML)的模組。

參數屬性

類型:CimSession
預設值:None
支援萬用字元:False
不要顯示:False

參數集

CimSession
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-FullyQualifiedName

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

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

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

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

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

你不能在同一個指令中指定 FullyQualifiedName 參數和 Name 參數。

參數屬性

類型:

ModuleSpecification[]

預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-ListAvailable

預設情況下, Get-Module 只會回傳已匯入目前工作階段的模組。 使用此參數,指令會列出環境變數中 $env:PSModulePath 任意路徑中安裝的模組。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

Available
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
PsSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
CimSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Name

指定該指令子所取得的模組名稱或命名模式。 允許使用通配符字元。 你也可以把名稱串接成 Get-Module。 你不能在同一個指令中指定 FullyQualifiedName 參數和 Name 參數。

名稱 無法接受模組 GUID 作為值。 若要透過指定 GUID 來回傳模組,請改用 FullyQualifiedName 。

參數屬性

類型:

String[]

預設值:None
支援萬用字元:True
不要顯示:False

參數集

(All)
Position:0
必要:False
來自管線的值:True
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-PSEdition

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

此參數可接受的值為:

  • Desktop
  • Core

Get-Module cmdlet 會檢查 PSModuleInfo 物件的 CompatiblePSEditions 屬性是否符合指定值,並只回傳設定該值的模組。

Note

  • Desktop Edition︰建置在 .NET Framework 上,並與 Server Core 和 Windows Desktop 等完整版 Windows 上執行之目標 PowerShell 版本的指令碼和模組相容。
  • Core Edition︰建置在 .NET Core 上,並與 Nano Server 和 Windows IoT 等縮減版 Windows 上執行之目標 PowerShell 版本的指令碼和模組相容。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False

參數集

PsSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
Available
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-PSSession

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

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

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

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

參數屬性

類型:PSSession
預設值:None
支援萬用字元:False
不要顯示:False

參數集

PsSession
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Refresh

表示此指令檔會刷新已安裝指令的快取。 指令快取會在會話開始時建立。 它讓 Get-Command cmdlet 能夠從未匯入到會話的模組中取得指令。

此參數設計用於模組內容自會話開始以來有所變動的開發與測試情境。

當你在指令中指定 Refresh 參數時,必須指定 ListAvailable。

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

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

Available
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
PsSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
CimSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-SkipEditionCheck

跳過 CompatiblePSEditions 欄位的檢查。

預設情況下,會Get-Module省略目錄中%windir%\System32\WindowsPowerShell\v1.0\Modules未在相容PSEditions欄位中指定的Core模組。 當此切換器被設定時,包含不含 Core 的模組,因此 Windows PowerShell 模組路徑下與 PowerShell v6 及以上版本不相容的模組會被回傳。

在 macOS 和 Linux 上,這個參數沒有作用。

更多資訊請參見 about_PowerShell_Editions 。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

Available
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
PsSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
CimSession
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。

輸入

String

你可以把模組名稱管道輸入這個指令碼。

輸出

PSModuleInfo

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

備註

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

  • 所有平臺:

    • gmo
  • 從 Windows PowerShell 3.0 開始,PowerShell 中包含的核心指令被封裝成模組。 例外是Microsoft。PowerShell.Core,這是一個可插入式(PSSnapin)。 預設情況下,只有 Microsoft。PowerShell.Core snap-in 會加入會話中。 模組在首次使用時會自動匯入,你可以用 Import-Module cmdlet 來匯入。

  • 在 PowerShell 2.0 Windows以及在後期版本中建立舊式會話的主機程式中,核心指令以 snap-in(PSSnapins)形式封裝。 例外是Microsoft。PowerShell.Core,這通常是 snap-in。 此外,遠端工作階段,如 cmdlet 啟動 New-PSSession 的,是較舊式的工作階段,包含核心 snap-in。

    關於建立帶有核心模組的新型 CreateDefault2 方法,請參閱 CreateDefault2 方法。

  • Get-Module 只取得儲存在 PSModulePath 環境變數值中的模組($Env:PSModulePath)。 Import-Module指令檔可以匯入其他位置的模組,但你無法用指令Get-Module檔來取得模組。

  • 此外,從 PowerShell 3.0 開始,回傳物件新增 Get-Module 了屬性,讓在模組匯入前就能更容易學習。 所有物業在匯入前都會被填滿。 這些包括 ExportedCommands、 ExportedCmdlets 和 ExportedFunctions 屬性,列出模組匯出的指令。

  • ListAvailable 參數只接收良構模組,也就是至少包含一個檔案,其基底名稱與模組資料夾名稱相同。 基礎名稱是沒有檔名副檔名的名稱。 包含不同名稱檔案的資料夾被視為容器,但不屬於模組。

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

  • 要使用 CIM 會話功能,遠端電腦必須具備 WS-Management 遠端存取及Windows管理儀器(WMI),這是通用資訊模型(CIM)標準的Microsoft實作。 電腦還必須擁有模組發現 WMI 提供者,或具備相同基本功能的替代 WMI 供應商。

    你可以在未執行 Windows 作業系統的電腦,以及安裝 PowerShell 但未啟用 PowerShell 遠端的 Windows 電腦上使用 CIM 會話功能。

    你也可以利用 CIM 參數,從啟用 PowerShell 遠端管理的電腦取得 CIM 模組。 這也包括本地電腦。 當你在本地電腦建立 CIM 會話時,PowerShell 會使用 DCOM 而非 WMI 來建立會話。