有没有办法为cmdlet创建别名,只有在参数传递给别名时才会运行?

问题描述 投票:1回答:1

我试图以create an alias cmdlet的Get-Command(命名为哪个),如果我没有发送任何参数它不会运行(因为如果没有参数运行它会输出所有可用的命令)。

我知道这可以使用函数完成,但我想保留选项卡完成功能,而不必编写一个放在我的$PROFILE中的相当大的函数。

简而言之,我只希望别名在传递参数时起作用。

powershell alias
1个回答
0
投票

您不能使用别名来执行此操作,因为PowerShell别名只能引用另一个命令名称或路径,因此既不包含参数也不包含自定义逻辑。

虽然你确实需要一个函数,但它不一定是一个相当大的函数:

function which { if ($args.count) { Get-Command @args } else { Throw "Missing command name." } }

但请注意,虽然传递-?以显示Get-Command的帮助确实有效,但参数的制表符完成却没有。

为了获得制表符,你需要编写一个proxy function或至少复制Get-Command的参数声明 - 然后确实使函数变大。

如果关注的只是$PROFILE本身的大小,你可以编写一个代理脚本 - which.ps1 - 你也可以用which调用它,假设你把它放在$env:Path中列出的一个目录中。

© www.soinside.com 2019 - 2024. All rights reserved.