如何使用Get-Command查找与一组过滤器匹配的命令?

时间:2017-04-02 22:26:08

标签: powershell

我对powershell很新。我已经完成了搜索并检查了stackoverflow和超级用户。即便是我的移动应用程序和价格合理的教科书也没有提及它。

是否有一种简单的方法可以应用我不理解的多个选项/过滤器。或者是否有一个我不知道的术语意味着选项/过滤器?

我一直在尝试使用:

get-command -commandtype cmdlet -and -verb add
get-command -commandtype cmdlet| -verb add
get-command -commandtype cmdlet|get-command -verb add

这些都没有带回正确的清单。最后带回来的东西,但它总是随机的,只有一些正确的结果。

我对任何回复感兴趣。非常感兴趣,如果你是一个伟大的PowerShell用户,可以简单而简洁地帮助。

提前致谢。

1 个答案:

答案 0 :(得分:3)

Get-Command -Verb Add

会显示名称以Add-开头的所有cmdlet 函数。

如果您只想将输出限制为cmdlet,请使用带有(隐含)Add-*参数的通配符模式-Name

Get-Command -CommandType cmdlet Add-*

效率较低,基于管道的等价物将是:

Get-Command -CommandType cmdlet | ? Verb -eq 'Add' # '?' is an alias for 'Where-Object'

虽然能够将-CommandTypeCmdlet特定值-Verb参数组合起来是有意义的,但当前语法(截至PSv5.1)不允许,Get-Command -?的输出(部分)证明:

Get-Command [[-Name] <String[]>] [[-ArgumentList] <Object[]>] [-All] [-CommandType {Alias | Function | Filter | Cmdlet | ExternalScript | Application | 
Script | Workflow | Configuration | All}] [-FullyQualifiedModule <ModuleSpecification[]>] [-ListImported] [-Module <String[]>] [-ParameterName <String[]>] 
[-ParameterType <PSTypeName[]>] [-ShowCommandInfo] [-Syntax] [-TotalCount <Int32>] [<CommonParameters>]

Get-Command [[-ArgumentList] <Object[]>] [-All] [-FullyQualifiedModule <ModuleSpecification[]>] [-ListImported] [-Module <String[]>] [-Noun <String[]>] 
[-ParameterName <String[]>] [-ParameterType <PSTypeName[]>] [-ShowCommandInfo] [-Syntax] [-TotalCount <Int32>] [-Verb <String[]>] [<CommonParameters>]

上面的每个段落代表一个所谓的参数集,如您所见,-Verb-Name位于不同的参数集中,这意味着您不能将它们用作同一命令行的一部分。

至于您尝试的内容

  • get-command -commandtype cmdlet -and -verb add

    • 命令获取参数(参数值)的列表 - 其解释取决于目标命令;不支持使用布尔运算符(例如-and)来组合这些运算符 布尔运算符只能用于表达式,而不能用于命令
  • get-command -commandtype cmdlet| -verb add

    • 您只能使用管道来管道命令(cmdlet,函数,别名,外部实用程序及其参数) - 在您的情况下,-verb被解释为命令名称,这明显失败了。
  • get-command -commandtype cmdlet|get-command -verb add

    • 您已使用get-command -commandtype cmdlet检索所有cmdlet的一个,您不需要第二个get-command实例来进一步过滤结果 - 而是通过属性get-command次调用输出的对象>,如上所示。