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>]

说明

Get-Module cmdlet 获取已导入或可导入到 PowerShell 会话中的 PowerShell 模块。 返回的模块对象 Get-Module 包含有关模块的宝贵信息。 还可以通过管道将模块对象传递给其他 cmdlet,例如 Import-Module cmdlet Remove-Module

如果没有参数, 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-ModuleImport-Module导入通用信息模型 (CIM) 模块,其中 cmdlet 在 Cmdlet 定义 XML (CDXML) 文件中定义。 此功能允许使用在非托管代码程序集中实现的 cmdlet,例如使用 C++ 编写的 cmdlet。

有了这些新功能, Get-Module cmdlet Import-Module 将成为管理异类企业的主要工具,其中包括运行 Windows 操作系统的计算机和运行其他操作系统的计算机。

若要管理运行启用了 PowerShell 和 PowerShell 远程处理的 Windows 操作系统的远程计算机,请在远程计算机上创建 PSSession,然后使用 PSSession 参数Get-Module获取 PSSession 中的 PowerShell 模块。 导入模块,然后在当前会话中使用导入的命令时,这些命令在远程计算机上的 PSSession 中隐式运行。 你可以将此策略用于管理远程计算机。

可以使用类似的策略来管理未启用 PowerShell 远程处理的计算机。 其中包括未运行 Windows 操作系统的计算机,以及启用了 PowerShell 但未启用 PowerShell 远程处理的计算机。

首先,在远程计算机上创建 CIM 会话。 CIM 会话是与远程计算机上的 Windows Management Instrumentation (WMI) 的连接。 然后使用 CIMSession 参数 Get-Module 从 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,以将结果的格式设置为名为“”版本“作为列标题的表。

示例 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 获取$s变量中的 PSSession 中的模块。

如果通过管道将模块从其他会话传递到 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

第二个命令使用变量中的 $cs CIM 会话在 RSDGF03 计算机上运行 Get-Module 命令。 该命令使用 Name 参数指定 Storage 模块。 该命令使用管道运算符 (|) 将存储模块发送到 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

ModuleSpecification 对象的形式指定模块的名称。 这些对象在 MSDN 库中的 ModuleSpecification 构造函数的 “备注”部分 (哈希表) 中介绍。 例如, FullyQualifiedName 参数接受以下格式指定的模块名称:

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

ModuleNameModuleVersion 是必需的,但 Guid 是可选的。

不能在 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

-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 刷新已安装命令的缓存。 命令缓存是在会话启动时创建的。 它使 cmdlet 能够 Get-Command 从未导入到会话的模块中获取命令。

此参数旨在用于开发和测试方案,在这些方案中,模块的内容自会话启动后已发生更改。

在命令中指定 Refresh 参数时,必须指定 ListAvailable

已在 Windows PowerShell 3.0 中引入了此参数。

Type:SwitchParameter
Position:Named
Default value:False
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 3.0 开始,随 PowerShell 一起安装的核心命令打包在模块中。 在 Windows PowerShell 2.0 和在更高版本的 PowerShell 中创建旧式会话的主机程序中,核心命令打包在管理单元中 (PSSnapins) 。 Microsoft.PowerShell.Core 是例外情况,它始终是一个管理单元。 此外,远程会话(如 cmdlet 启动 New-PSSession 的会话)是包含核心管理单元的旧式会话。

    有关使用核心模块创建新样式会话的 CreateDefault2 方法的信息,请参阅 MSDN 库中的 CreateDefault2 方法

  • Get-Module 仅获取存储在 PSModulePath 环境变量值 ($env:PSModulePath) 中的位置的模块。 可以使用 cmdlet 的 Import-ModulePath 参数导入其他位置的模块,但不能使用 Get-Module cmdlet 获取模块。

  • 此外,从 PowerShell 3.0 开始,新属性已添加到返回的对象中, Get-Module 这样即使在导入模块之前也能更轻松地了解模块。 导入之前会填充所有属性。 其中包括 ExportedCommandsExportedCmdlet 和ExportedFunctions 属性,这些属性列出了模块导出的命令。

  • ListAvailable 参数仅获取格式良好的模块,即包含至少一个文件的文件夹,其基名称与模块文件夹的名称相同。 基名称是没有文件扩展名的名称。 包含具有不同名称的文件的文件夹被视为容器,而不是模块。

    若要获取作为.dll文件实现但未包含在模块文件夹中的模块,请同时指定 ListAvailableAll 参数。

  • 若要使用 CIM 会话功能,远程计算机必须具有 WS-Management 远程处理和 Windows Management Instrumentation (WMI),后者是通用信息模型 (CIM) 标准的 Microsoft 实现。 计算机必须还具有模块发现 WMI 提供程序或具有相同基本功能的备用 WMI 提供程序。

    可以在未运行 Windows 操作系统和具有 PowerShell 但未启用 PowerShell 远程处理的 Windows 计算机上使用 CIM 会话功能。

    还可以使用 CIM 参数从已启用 PowerShell 远程处理的计算机获取 CIM 模块。 这包括本地计算机。 在本地计算机上创建 CIM 会话时,PowerShell 使用 DCOM 而不是 WMI 来创建会话。