在bash,我有一堆参数添加到现有的程序/功能,例如别名:在powershell中使用另一个cmdlet的参数定义?
alias grep='grep --color'
我知道这不是最好的比喻,但有一个简单的方法来做到这一点在PowerShell中?好像Set-Alias不让你指定参数。
您可以为cmdlet创建别名,但不能为由cmdlet及其参数组成的命令创建别名 。
他们建议创建一个新的cmdlet来这样做,但我宁愿能够通过额外的参数,而无需硬编码在所有新的cmdlet中允许PARAMS(像新ProxyCommand似乎需要你做)。这样,我不必知道代理cmdlet中的代理/别名cmdlet参数何时发生更改和更改。
那么,什么是对
- 不是静态复制参数定义的别名/代理cmdlet中的最佳解决方案。让原始cmdlet执行验证或动态引用它。
- 所以你必须做一些明确的,以获得不同的行为
- 已经在别名/代理cmdlet的
最近我的别名/新cmdlet的值传递给现有的参数使用的别名/名称不同的小命令可以认为是类似于下面的东西,尽管语法可能是错误的。似乎也不会像管道那样发挥最好的效果,但可能会以某种方式解决问题。
& $proxiedcommand $additionaldefaultparams $rawparamsfromread-host
还是有使用事情proxy cmdlets动态实例像下面的参数的方法吗?
function aliased-cmdlet
{
[CmdletBinding((Get-Command Original-Cmdlet)._cmdletBindingsettings_)]
Param(
(Get-Command Original-Cmdlet)._paramsettings_)
)
Original-Cmdlet -CustomDefault Value -Whatever Else
}
这个[Jeff Hicks的例子](https://mcpmag.com/articles/2013/11/05/blacksmith-part-7.aspx)或者这个[Don Jones的漫游](http://windowsitpro.com/blog/powershell-proxy-functions)可能有帮助 – BenH
您可能需要考虑编写一个使用'$ myinvocation',特别是'$ myinvocation.line'的scriptlet(脚本函数),并解析其中的任何参数已提供,您需要修改或覆盖。例如,请参阅[关于“获取所有参数”的MSDN页面](https://blogs.msdn.microsoft。com/powershell/2007/05/31/getting-all-your-parameters /) –
@BenH,我稍微更新了我的问题。我认为代理人命令已经接近尾声,但并没有解决参数变得过时的问题。看起来解决方案是获取更多元数据并动态执行代理cmdlet生成。似乎有点过度设计和脆弱,我觉得应该是一个简单的解决方案。 – undefinedvariable