当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Get-Module (Microsoft.PowerShell.Core)

作者:精品下载站 日期:2024-12-14 02:15:55 浏览:15 分类:玩电脑

Get-Module (Microsoft.PowerShell.Core)


Get-Module

模块 :Microsoft.PowerShell.Core

列出当前会话中导入的模块或可以从 PSModulePath 导入的模块。

句法

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

描述

Get-Module cmdlet 列出了已导入或可以导入到 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 来获取和导入公共信息模型 (CIM) 模块。 CIM 模块在 Cmdlet 定义 XML (CDXML) 文件中定义 cmdlet。此功能允许您使用在非托管代码程序集中实现的 cmdlet,例如用 C++ 编写的程序集。

隐式远程处理可用于管理启用了 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_Modules 和 about_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,以将结果格式化为以 NameVersion 作为列标题的表格。

在模块的完全限定名称中,值 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

此命令获取 Get-Module 返回的 PSModuleInfo 对象的属性。每个模块文件都有一个对象。

您可以使用属性来格式化和过滤模块对象。有关属性的详细信息,请参阅 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 操作系统的远程计算机的存储系统。在此示例中,由于计算机管理员已安装 Module Discovery 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 命令。该命令使用名称参数来指定存储模块。该命令使用管道运算符 (|) 将存储模块发送到 Import-Module cmdlet,后者将其导入到本地会话中。

第三条命令在存储模块中的 Get-Disk 命令上运行 Get-Command cmdlet。将 CIM 模块导入本地会话时,PowerShell 会将表示 CIM 模块的 CDXML 文件转换为 PowerShell 脚本,这些脚本在本地会话中显示为函数。

第四个命令运行 Get-Disk 命令。尽管该命令是在本地会话中键入的,但它会在导入该命令的远程计算机上隐式运行。该命令从远程计算机获取对象并将它们返回到本地会话。

参数

-All

指示此 cmdlet 获取每个模块文件夹中的所有模块,包括嵌套模块、清单 (.psd1) 文件、脚本模块 (.psm1) 文件和二进制模块 (.dll)文件。如果没有此参数,Get-Module 仅获取每个模块文件夹中的默认模块。

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-CimNamespace

指定公开 CIM 模块的备用 CIM 提供程序的命名空间。默认值是模块发现 WMI 提供程序的命名空间。

使用此参数可从未运行 Windows 操作系统的计算机和设备获取 CIM 模块。

此参数是在 Windows PowerShell 3.0 中引入的。

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-CimResourceUri

指定 CIM 模块的备用位置。默认值是远程计算机上模块发现 WMI 提供程序的资源 URI。

使用此参数可从未运行 Windows 操作系统的计算机和设备获取 CIM 模块。

此参数是在 Windows PowerShell 3.0 中引入的。

类型 :

乌里

位置:

命名

默认值:

None

必需的:

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

必需的:

True

接受管道输入:

False

接受通配符:

False

-FullyQualifiedName

该值可以是模块名称、完整模块规范或模块文件的路径。

当该值是路径时,该路径可以是完全限定的或相对的。相对路径是相对于包含 using 语句的脚本进行解析的。

当该值为名称或模块规范时,PowerShell 会在 PSModulePath 中搜索指定的模块。

模块规范是一个具有以下键的哈希表。

  • ModuleName - 必需 指定模块名称。
  • GUID - 可选 指定模块的 GUID。
  • 必需至少指定以下三个键之一。

    • ModuleVersion - 指定模块的最低可接受版本。
  • MaximumVersion - 指定模块可接受的最大版本。
  • RequiredVersion - 指定模块的准确的、必需的版本。它不能与其他版本密钥一起使用。

您不能在同一命令中将 FullyQualifiedName 参数指定为 Name 参数。

类型 :

模块规格[]

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

True

接受通配符:

False

-ListAvailable

指示此 cmdlet 获取所有已安装的模块。 Get-Module 获取 PSModulePath 环境变量中列出的路径中的模块。如果没有此参数,Get-Module 仅获取在 PSModulePath 环境变量中列出并在当前会话中加载的模块。 ListAvailable 不会返回在 PSModulePath 环境变量中找不到的模块的信息,即使这些模块已在当前会话中加载也是如此。

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Name

指定此 cmdlet 获取的模块的名称或名称模式。允许使用通配符。您还可以通过管道将名称传递给 Get-Module。您不能在同一命令中将 FullyQualifiedName 参数指定为 Name 参数。

名称无法接受模块 GUID 作为值。要通过指定 GUID 返回模块,请改用 FullyQualifiedName

类型 :

String[]

位置:

0

默认值:

None

必需的:

False

接受管道输入:

True

接受通配符:

True

-PSEdition

获取支持指定版本的 PowerShell 的模块。

该参数可接受的值为:

    Desktop
    Core

    Get-Module cmdlet 检查 PSModuleInfo 对象的 CompatiblePSEditions 属性是否有指定值,并仅返回已设置该值的模块。

    笔记

    • 桌面版:基于 .NET Framework 构建,并提供与针对在完整版 Windows(例如 Server Core 和 Windows Desktop)上运行的 PowerShell 版本的脚本和模块的兼容性。
    • 核心版:基于 .NET Core 构建,并提供与针对运行在精简版 Windows(例如 Nano Server 和 Windows IoT)上的 PowerShell 版本的脚本和模块的兼容性。
    类型 :

    String

    位置:

    命名

    默认值:

    None

    必需的:

    False

    接受管道输入:

    False

    接受通配符:

    False

    -PSSession

    获取指定的用户管理的 PowerShell 会话 (PSSession) 中的模块。输入包含会话的变量、获取会话的命令(例如 Get-PSSession 命令)或创建会话的命令(例如 New-PSSession) > 命令。

    当会话连接到远程计算机时,您必须指定 ListAvailable 参数。

    使用 PSSession 参数的 Get-Module 命令相当于使用 Invoke-Command cmdlet 运行 Get-Module - PSSession 中的 ListAvailable 命令。

    此参数是在 Windows PowerShell 3.0 中引入的。

    类型 :

    PS会话

    位置:

    命名

    默认值:

    None

    必需的:

    True

    接受管道输入:

    False

    接受通配符:

    False

    -Refresh

    指示此 cmdlet 刷新已安装命令的缓存。命令缓存是在会话启动时创建的。它使 Get-Command cmdlet 能够从未导入到会话中的模块获取命令。

    此参数专为开发和测试场景而设计,在这些场景中,自会话开始以来模块内容已发生更改。

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

    此参数是在 Windows PowerShell 3.0 中引入的。

    类型 :

    SwitchParameter

    位置:

    命名

    默认值:

    False

    必需的:

    False

    接受管道输入:

    False

    接受通配符:

    False

    -SkipEditionCheck

    跳过 CompatiblePSEditions 字段的检查。

    默认情况下,Get-Module 会忽略 %windir%\System32\WindowsPowerShell\v1.0\Modules 目录中未指定 Core 的模块在CompatiblePSEditions字段中。设置此开关后,将包含没有 Core 的模块,以便返回 Windows PowerShell 模块路径下与 PowerShell v6 及更高版本不兼容的模块。

    在 macOS 和 Linux 上,此参数不执行任何操作。

    有关详细信息,请参阅 about_PowerShell_Editions。

    类型 :

    SwitchParameter

    位置:

    命名

    默认值:

    None

    必需的:

    False

    接受管道输入:

    False

    接受通配符:

    False

    输入

    字符串

    您可以通过管道将模块名称传递给此 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 是个例外,它始终是一个管理单元。此外,远程会话(例如由 New-PSSession cmdlet 启动的会话)是包含核心管理单元的旧式会话。

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

    • Get-Module 仅获取存储在 PSModulePath 环境变量 ($env:PSModulePath) 值中的位置中的模块。 Import-Module cmdlet 可以导入其他位置的模块,但无法使用 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 来创建会话。

    • 您需要 登录账户 后才能发表评论

      取消回复欢迎 发表评论:

      关灯