Get-Command
获取所有命令。
语法
Get-Command
[-Verb <String[]>]
[-Noun <String[]>]
[-Module <String[]>]
[-FullyQualifiedModule <ModuleSpecification[]>]
[-TotalCount <Int32>]
[-Syntax]
[-ShowCommandInfo]
[[-ArgumentList] <Object[]>]
[-All]
[-ListImported]
[-ParameterName <String[]>]
[-ParameterType <PSTypeName[]>]
[<CommonParameters>]
Get-Command
[[-Name] <String[]>]
[-Module <String[]>]
[-FullyQualifiedModule <ModuleSpecification[]>]
[-CommandType <CommandTypes>]
[-TotalCount <Int32>]
[-Syntax]
[-ShowCommandInfo]
[[-ArgumentList] <Object[]>]
[-All]
[-ListImported]
[-ParameterName <String[]>]
[-ParameterType <PSTypeName[]>]
[-UseFuzzyMatching]
[-FuzzyMinimumDistance <UInt32>]
[-UseAbbreviationExpansion]
[<CommonParameters>]
说明
Get-Command
cmdlet 获取安装在计算机上的所有命令,包括 cmdlet、别名、函数、筛选器、脚本和应用程序。 Get-Command
获取 PowerShell 模块中的命令以及已从其他会话中导入的命令。 若要仅获取已导入到当前会话中的命令,请使用 ListImported 参数。
在没有参数的情况下,Get-Command
获取安装在计算机上的所有 cmdlet、函数和别名。 Get-Command *
获取所有类型的命令,包括它在 Application 命令类型中列出的 Path 环境变量 ($env:Path
) 中的所有非 PowerShell 文件。
使用其实际名称(不包含通配符)的 Get-Command
自动导入包含该命令的模块,以便你可以立即使用该命令。 若要启用、禁用和配置模块的自动导入,请使用 $PSModuleAutoLoadingPreference
首选项变量。 有关详细信息,请参阅 about_Preference_Variables。
Get-Command
从命令代码中直接获取其数据,它与从帮助主题中获取其信息的 Get-Help
不同。
从 Windows PowerShell 5.0 开始,Get-Command
cmdlet 的结果默认显示 Version 列。 新的 Version 属性已添加到 CommandInfo 类。
示例
示例 1:获取 cmdlet、函数和别名
此命令将获取安装在计算机上的 PowerShell cmdlet、函数和别名。
Get-Command
示例 2:获取当前会话中的命令
此命令使用 ListImported 参数来仅获取当前会话中的命令。
Get-Command -ListImported
示例 3:获取 cmdlet 并按顺序显示它们
此命令将获取所有的 cmdlet、通过 cmdlet 名称中的名词按字母顺序对其进行排序,然后将其显示在基于名词的组中。 此显示内容可帮助你在任务中查找 cmdlet。
Get-Command -Type Cmdlet | Sort-Object -Property Noun | Format-Table -GroupBy Noun
示例 4:获取模块中的命令
此命令使用 Module 参数来获取 Microsoft.PowerShell.Security 和 Microsoft.PowerShell.Utility 模块中的命令。
Get-Command -Module Microsoft.PowerShell.Security, Microsoft.PowerShell.Utility
示例 5:获取有关 cmdlet 的信息
此命令获取有关 Get-AppLockerPolicy
cmdlet 的信息。 它还会导入 AppLocker 模块,该模块可将 AppLocker 模块中的所有命令添加到当前会话中。
Get-Command Get-AppLockerPolicy
当模块自动导入时,效果与使用 Import-Module cmdlet 相同。
该模块可以添加命令、类型和格式设置文件,并在会话中运行脚本。 若要启用、禁用和配置模块的自动导入,请使用 $PSModuleAutoLoadingPreference
首选项变量。 有关详细信息,请参阅 about_Preference_Variables。
示例 6:获取 cmdlet 的语法
此命令使用 ArgumentList 和 Syntax 参数来获取 Get-ChildItem
cmdlet 在 Cert: 驱动器中使用时的语法。 Cert: 驱动器是 Certificate 提供程序向会话中添加的 PowerShell 驱动器。
Get-Command -Name Get-Childitem -Args Cert: -Syntax
如果比较输出中显示的语法和省略 Args (ArgumentList) 参数时显示的语法,你会发现 Certificate 提供程序可将动态参数 CodeSigningCert 添加到 Get-ChildItem
cmdlet。
有关 Certificate 提供程序的详细信息,请参阅 about_Certificate_Provider。
示例 7:获取动态参数
该示例中的命令使用 Get-DynamicParameters
函数来获取 Certificate 提供程序在 Cert: 驱动器中使用时添加到 Get-ChildItem
cmdlet 的动态参数。
function Get-DynamicParameters
{
param ($Cmdlet, $PSDrive)
(Get-Command -Name $Cmdlet -ArgumentList $PSDrive).ParameterSets |
ForEach-Object {$_.Parameters} |
Where-Object { $_.IsDynamic } |
Select-Object -Property Name -Unique
}
Get-DynamicParameters -Cmdlet Get-ChildItem -PSDrive Cert:
Name
----
CodeSigningCert
此示例中 Get-DynamicParameters
函数获取 cmdlet 的动态参数。 这是上一示例中所用方法的替代方法。 可以通过另一个 cmdlet 或提供程序将 Dynamic 参数添加到 cmdlet。
示例 8:获取所有类型的所有命令
此命令将获取本地计算机上的所有类型的所有命令,包括 Path 环境变量 ($env:path
) 的路径中的可执行文件。
Get-Command *
它将为每个文件返回一个 ApplicationInfo 对象 (System.Management.Automation.ApplicationInfo),而不是 FileInfo 对象 (System.IO.FileInfo)。
示例 9:使用参数名称和类型获取 cmdlet
此命令将获取具有名称中包含 Auth 且类型为 AuthenticationMechanism 的参数的 cmdlet。
Get-Command -ParameterName *Auth* -ParameterType AuthenticationMechanism
可以使用类似此命令的命令查找允许你指定用于对用户进行身份验证的方法的 cmdlet。
即使采用 AuthenticationMechanism 值的参数和采用 AuthenticationLevel 参数的参数具有类似名称,ParameterType 参数也可区分它们。
示例 10:获取别名
此示例显示了如何使用具有别名的 Get-Command
cmdlet。
Get-Command -Name dir
CommandType Name ModuleName
----------- ---- ----------
Alias dir -> Get-ChildItem
虽然它通常用于 cmdlet 和函数,但是 Get-Command
也可获取脚本、函数、别名和可执行文件。
命令的输出将显示别名的 Name 属性值的特殊视图。 该视图将显示别名以及完整的命令名称。
示例 11:从别名获取语法
此示例演示如何获取带标准名称的别名的语法。
命令的输出显示带标准名称的标记别名,后跟语法。
Get-Command -Name dir -Syntax
dir (alias) -> Get-ChildItem
dir [[-Path] <string[]>] [[-Filter] <string>] [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint>] [-Force] [-Name] [-Attributes <FlagsExpression[FileAttributes]>] [-FollowSymlink] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
dir [[-Filter] <string>] -LiteralPath <string[]> [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint>] [-Force] [-Name] [-Attributes <FlagsExpression[FileAttributes]>] [-FollowSymlink] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
示例 12:获取 Notepad 命令的所有实例
此示例使用 Get-Command
cmdlet 的 All 参数在本地计算机上显示 Notepad
命令的所有实例。
Get-Command Notepad -All | Format-Table CommandType, Name, Definition
CommandType Name Definition
----------- ---- ----------
Application notepad.exe C:\WINDOWS\system32\notepad.exe
Application NOTEPAD.EXE C:\WINDOWS\NOTEPAD.EXE
当会话中的多个命令具有相同名称时,All 参数非常有用。
默认情况下,从 Windows PowerShell 3.0 开始,当会话中的多个命令具有相同名称时,Get-Command
仅获取在键入命令名称时运行的命令。 借助 All 参数,Get-Command
可获取具有指定名称的所有命令,并按执行优先级顺序返回它们。 若要运行除列表中第一个命令以外的某个命令,请键入该命令的完全限定的路径。
有关命令优先级的详细信息,请参阅 about_Command_Precedence。
示例 13:获取包含 cmdlet 的模块的名称
此命令将获取 Get-Date
cmdlet 来自的模块的名称。
该命令使用所有命令的 ModuleName 属性。
(Get-Command Get-Date).ModuleName
Microsoft.PowerShell.Utility
此命令格式适用于 PowerShell 模块中的命令,即使未将它们导入到该会话中也是如此。
示例 14:获取具有输出类型的 cmdlet 和函数
Get-Command -Type Cmdlet | Where-Object OutputType | Format-List -Property Name, OutputType
此命令将获取具有输出类型及其返回的对象类型的 cmdlet 和函数。
该命令的第一部分将获取所有 cmdlet。 管道运算符 (|
) 将 cmdlet 发送给 Where-Object
cmdlet,后者仅选择其中填充了 OutputType 属性的 cmdlet。 另一个管道运算符将所选 cmdlet 对象发送到 Format-List
cmdlet,后者显示列表中每个 cmdlet 的名称和输出类型。
仅当 cmdlet 代码为 cmdlet 定义了 OutputType 属性时,CommandInfo 对象的 OutputType 属性的值才为非 null。
示例 15:获取将特定对象类型作为输入的 cmdlet
Get-Command -ParameterType (((Get-NetAdapter)[0]).PSTypeNames)
CommandType Name ModuleName
----------- ---- ----------
Function Disable-NetAdapter NetAdapter
Function Enable-NetAdapter NetAdapter
Function Rename-NetAdapter NetAdapter
Function Restart-NetAdapter NetAdapter
Function Set-NetAdapter NetAdapter
此命令可查找将网络适配器对象用作输入的 cmdlet。 可以使用此命令格式查找接受任何命令返回的对象类型的 cmdlet。
该命令使用所有对象的 PSTypeNames 内部属性,它将获取用于描述该对象的类型。 若要获取网络适配器的 PSTypeNames 属性,而不是网络适配器集合的 PSTypeNames 属性,该命令将使用数组表示法来获取该 cmdlet 返回的第一个网络适配器。
示例 16:使用模糊匹配获取命令
在此示例中,命令的名称故意出现拼写错误“get-commnd”。
使用 -UseFuzzyMatching
开关,cmdlet 确定最佳的匹配项是 Get-Command
后跟系统上其他类似匹配的本机命令。
Get-Command get-commnd -UseFuzzyMatching
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Command 6.2.0.0 Microsoft.PowerShell.Core
Application getconf 0.0.0.0 /usr/bin/getconf
Application command 0.0.0.0 /usr/bin/command
参数
-All
指示此 cmdlet 获取所有命令,包括名称相同的同一类命令。 默认情况下,Get-Command
仅获取键入命令名称时运行的命令。
有关 PowerShell 用于选择要在多个命令具有相同名称时运行的命令的方法的详细信息,请参阅 about_Command_Precedence。 有关模块限定的命令名称和默认情况下由于名称冲突而不再运行的运行中的命令的信息,请参阅 about_Modules。
已在 Windows PowerShell 3.0 中引入了此参数。
在 Windows PowerShell 2.0 中,Get-Command
将在默认情况下获取所有命令。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-ArgumentList
指定参数数组。 此 cmdlet 获取有关与指定参数(“arguments”)一起使用时的 cmdlet 或函数的信息。 ArgumentList 的别名为 Args。
若要检测仅当使用某些其他参数时才可用的动态参数,请将 ArgumentList 的值设置为可触发动态参数的参数。
若要检测提供程序向 cmdlet 添加的动态参数,请将 ArgumentList 参数的值设置为提供程序驱动器(例如 WSMan:、HKLM: 或 Cert:)中的某个路径。 当命令是 PowerShell 提供程序 cmdlet 时,在每个命令中只输入一个路径。 提供程序 cmdlet 仅返回 ArgumentList 值的第一个路径的动态参数。 有关提供程序 cmdlet 的信息,请参阅 about_Providers。
类型: | Object[] |
别名: | Args |
Position: | 1 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-CommandType
指定此 cmdlet 获取的命令的类型。 输入一个或多个命令类型。 使用 CommandType 或其别名 Type。 默认情况下,Get-Command
将获取所有 cmdlet、函数和别名。
此参数的可接受值为:
Alias
:获取所有 PowerShell 命令的别名。 有关详细信息,请参阅 about_Aliases。All
:获取所有命令类型。 此参数值等效于Get-Command *
。Application
:获取在 Path 环境变量 ($env:path
) 中列出的路径中的非 PowerShell 文件,包括.txt
、.exe
和.dll
文件。 有关 Path 环境变量的详细信息,请参阅 about_Environment_Variables。Cmdlet
:获取所有 cmdlet。ExternalScript
:获取位于 Path 环境变量 ($env:path
) 所列路径中的所有.ps1
文件。Filter
和Function
:获取所有 PowerShell 高级和简单函数和筛选器。Script
:获取所有脚本块。 若要获取 PowerShell 脚本(.ps1
文件),请使用ExternalScript
值。
这些值定义为基于标志的枚举。 可以使用此参数将多个值组合在一起以设置多个标志。 可以将这些值作为值数组或这些值的逗号分隔字符串传递给 CommandType 参数。 该 cmdlet 将使用二进制或运算合并这些值。 将值作为数组传递是最简单的选项,此选项还支持对值使用 Tab 自动补全。
类型: | CommandTypes |
别名: | Type |
接受的值: | Alias, Function, Filter, Cmdlet, ExternalScript, Application, Script, Workflow, Configuration, All |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-FullyQualifiedModule
该值可以是模块名称、完整模块规范或模块文件的路径。
如果该值是路径,则可以是完全限定路径或相对路径。 相对路径相对于包含 using 语句的脚本进行解析。
当该值为名称或模块规范时,PowerShell 会在 PSModulePath 中搜索指定的模块。
模块规范是具有以下键的哈希表。
ModuleName
- 必需指定模块名称。GUID
- 可选指定模块的 GUID。还必需指定以下三个键中的至少一个。
ModuleVersion
- 指定模块的最低可接受版本。MaximumVersion
- 指定模块的最低可接受版本。RequiredVersion
- 指定模块所需的确切版本。 这不能与其他版本键一起使用。
不能在同一命令中将 FullyQualifiedModule 参数指定为 Module 参数。 这两个参数相互排斥。
类型: | ModuleSpecification[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-FuzzyMinimumDistance
此参数允许筛选模糊结果基本准确即可。 使用 Damerau Levenshtein 距离算法计算距离,该算法指示原始值中的匹配步骤数。 距离短一点更准确。 距离为零表示完全匹配。
类型: | UInt32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ListImported
指示此 cmdlet 仅获取当前会话中的命令。
默认情况下,从 PowerShell 3.0 开始,Get-Command
获取所有已安装的命令,包括但不限于当前会话中的命令。 在 PowerShell 2.0 中,它仅获取当前会话中的命令。
已在 Windows PowerShell 3.0 中引入了此参数。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Module
指定一个模型数组。 此 cmdlet 获取来自指定模块的命令。 输入模块或模块对象的名称。
此参数采用字符串值,但此参数的值也可以是 PSModuleInfo 对象,例如由 Get-Module
和 Import-PSSession
cmdlet 返回的对象。
类型: | String[] |
别名: | PSSnapin |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | True |
-Name
指定一个名称数组。 此 cmdlet 仅获取具有指定名称的命令。 输入一个名称或名称模式。 允许使用通配符。
若要获取具有相同名称的命令,请使用 All 参数。 默认情况下,当两个命令具有相同名称时,Get-Command
将获取在键入该命令名称时运行的命令。
类型: | String[] |
Position: | 0 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | True |
-Noun
指定一个命令名词数组。 此 cmdlet 获取名称中包含指定名词的命令,包括 cmdlet、函和别名。 输入一个或多个名词或名词模式。 允许使用通配符。
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | True |
-ParameterName
指定一个参数名称数组。 此 cmdlet 获取会话中具有指定参数的命令。 输入参数名称或参数别名。 支持使用通配符。
ParameterName 和 ParameterType 参数仅搜索当前会话中的命令。
已在 Windows PowerShell 3.0 中引入了此参数。
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-ParameterType
指定一个参数名称数组。 此 cmdlet 获取会话中具有指定类型的参数的命令。 输入参数类型的全名或部分名称。 支持使用通配符。
ParameterName 和 ParameterType 参数仅搜索当前会话中的命令。
已在 Windows PowerShell 3.0 中引入了此参数。
类型: | PSTypeName[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-ShowCommandInfo
指示此 cmdlet 显示命令信息。
已在 Windows PowerShell 5.0 中引入了此参数。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Syntax
指示此 cmdlet 仅获取有关该命令的以下指定数据:
- 别名。 获取标准名称。
- cmdlet。 获取语法。
- 函数和筛选器。 获取函数定义。
- 脚本和应用程序或文件。 获取路径和文件名。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-TotalCount
指定要获取的命令数。 可以使用此参数来限制命令的输出。
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-UseAbbreviationExpansion
指示使用命令中的字符匹配来查找命令中的大写字符。 例如,i-psdf
将匹配 Import-PowerShellDataFile
作为每个字符来查找结果中的大写字符匹配项。 使用此类型的匹配时,任何通配符都将导致无匹配项。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-UseFuzzyMatching
指示在查找命令时使用模糊匹配算法。 输出的顺序是从最接近匹配到最不可能的匹配。 通配符不应与模糊匹配一起使用,因为它将尝试匹配可能包含这些通配符的命令。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Verb
指定一个命令动词数组。 此 cmdlet 获取名称中包含指定动词的命令,包括 cmdlet、函和别名。 输入一个或多个谓词或谓词模式。 允许使用通配符。
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | True |
输入
可以通过管道将命令名称传递给此 cmdlet。
输出
此 cmdlet 返回派生自 CommandInfo 类的对象。 返回的对象的类型取决于 Get-Command
获取的命令的类型。
表示别名。
表示应用程序和文件。
表示 cmdlet。
表示函数和筛选器。
备注
PowerShell 包含以下 Get-Command
别名:
所有平台:
gcm
当名称相同的多个命令可用于该会话时,
Get-Command
将返回在键入该命令名称时运行的命令。 若要获取具有相同名称的命令(按运行顺序列出),请使用 All 参数。 有关详细信息,请参阅 about_Command_Precedence。当模块自动导入时,效果与使用
Import-Module
cmdlet 相同。 该模块可以添加命令、类型和格式设置文件,并在会话中运行脚本。 若要启用、禁用和配置模块的自动导入,请使用$PSModuleAutoLoadingPreference
首选项变量。 有关详细信息,请参阅 about_Preference_Variables。