Get-Command的ByPropertyName参数绑定:Name有效Module无效问题
问题原因解析
这是Get-Command参数绑定的特殊逻辑限制:
- 虽然
-Module参数标注支持ByPropertyName管道输入,但它无法单独通过管道触发绑定——必须搭配其他明确的命令筛选条件(比如指定-Name、-CommandType,或者管道对象同时包含Name属性)。 - 当仅传递含
Module属性的对象时,Get-Command会默认执行「列出所有可用命令」的逻辑,不会自动将Module的值作为筛选条件应用。
举两个可正常运行的验证例子:
- 同时传递
Module和通配符Name,触发筛选逻辑:
[PSCustomObject]@{Module = 'Microsoft.PowerShell.Archive'; Name = '*'} | Get-Command
- 手动指定
-CommandType,强制触发筛选:
[PSCustomObject]@{Module = 'Microsoft.PowerShell.Archive'} | Get-Command -CommandType Cmdlet
而-Name参数能单独工作,是因为它同时支持ByValue管道输入,且是位置0参数——只要管道对象带有Name属性,PowerShell会直接将值绑定到-Name上,触发按名称筛选的逻辑,无需额外条件。
内容的提问来源于stack exchange,提问作者Hemendr
相关产品推荐
相关产品推荐

