在Bash中,我有一堆别名可以为现有的程序/函数添加参数,例如:
我知道这不是最好的类比,但在Powershell中有简单的方法吗?似乎Set-Alias不允许您指定参数。
那么什么是最佳解决方案?
alias grep='grep --color'
我知道这不是最好的类比,但在Powershell中有简单的方法吗?似乎Set-Alias不允许您指定参数。
他们建议创建一个新的cmdlet来实现,但我希望能够传递附加参数,而不必在新的cmdlet中硬编码所有允许的参数(就像New-ProxyCommand似乎要求您这样做一样)。这样,我就不必知道代理/别名cmdlet参数何时更改并在我的代理cmdlet中进行更改。您可以为cmdlet创建别名,但不能为由cmdlet及其参数组成的命令创建别名。
那么什么是最佳解决方案?
- 不要静态复制别名/代理cmdlet的参数定义。让原始cmdlet进行验证或动态引用它。
- 使用别名/不同命名的cmdlet,以便必须明确执行某些操作才能获得不同的行为
- 使别名/新cmdlet将值传递给别名/代理cmdlet中的现有参数
我能想到的最接近的是以下内容,但语法可能不正确。似乎与管道的兼容性不太好,但可以通过某种方式解决。
& $proxiedcommand $additionaldefaultparams $rawparamsfromread-host
还是说有没有一种方法可以使用 代理 cmdlet 的内容来动态实例化参数,就像下面这样?
function aliased-cmdlet
{
[CmdletBinding((Get-Command Original-Cmdlet)._cmdletBindingsettings_)]
Param(
(Get-Command Original-Cmdlet)._paramsettings_)
)
Original-Cmdlet -CustomDefault Value -Whatever Else
}
$myinvocation
,特别是$myinvocation.line
,并解析它以获取任何可能已提供的参数,您需要修改或覆盖这些参数。例如,请参阅 MSDN 上的 “获取所有参数” 页面。 - Jeff Zeitlin