2011-08-31 59 views
4

鉴于我的研究,我不相信以下是很容易完成的,如果有的话。不过,作为最后的手段,我想我会在这里检查。较短版本的powershell cmdlet参数

在Powershell 2.0中,我想要一种方法来减少(烦人)参数的长名称到各种cmdlet。我想绝对控制简写版本的样子。 (而不是作为一个奴隶到任何参数的缩写方案PS使用)

因此,举例来说,我希望能够做这样的事情:

# Command goes on this first line to alias "-ForegroundColor" to "-fg" 
# Command goes on this second line to alias "-BackgroundColor" to "-bg" 
Wr-te-Host -fg yellow -bg black "Parameter aliases now work just like I want." 

什么是最接近我可以获得这个功能,以及如何?我无法使用'get-help about_parameters'找到有关参数缩写的任何内容。

谢谢!

+4

你只需要输入足够的参数字母来消除它的歧义:write-host -f green -b蓝色你好! – x0n

回答

9

检查这个脚本http://poshcode.org/2815

点源,并执行下面的,它提供了丰富的信息有关的命令参数。看看别名栏,它会显示所有内置参数别名以及计算您可以使用一个参数的最短名称:

PS > Get-Parameter Write-Host 


    Command: Microsoft.PowerShell.Utility/Write-Host 
    Set:  Default 


Name     Aliases  Position Mandatory Pipeline ByName Provider  Type 
----     -------  -------- --------- -------- ------ --------  ---- 
BackgroundColor  {b}   Named False  False False All    ConsoleColor 
ForegroundColor  {f}   Named False  False False All    ConsoleColor 
NoNewline    {n}   Named False  False False All    SwitchParameter 
Object     {obj}  0  False  True  False All    Object 
Separator    {s}   Named False  False False All    Object 
0

像这样的事情会给你一个小命令的现有的别名参数:

Get-Command write-host | 
    ForEach-Object {$_.parameters | 
     ForEach-Object { $_.Values | 
      Where-Object { 
       $_.Aliases.Count -gt 0 } | 
       Select-Object Name, Aliases 
      } 
    } 

我真的没有看到“控制”别名的方法。

+0

这是因为它们通常不是别名。它是一种自适应消歧算法。在你自己编写的高级函数中,你可以为参数指定别名,但即使没有指定任何东西,它们仍然会自行消除歧义。 – EBGreen

+1

@EBGreen - 对不起,我没有明白你的意思。根据OP的问题,'-ForeGroundColor'需要有* alias *'fg',而'f','fo','for'等用于消歧。这是你正在做的相同点吗? – manojlds

+0

恩,我不清楚。那里没有新东西。我想我试图说明,大多数人认为这些参数是别名,实际上只是消歧算法。正如你的代码所示,还有实际的别名。我想从我的评论中拿走应该是许多人经常认为别名真的不是;您不能在内置cmdlet上添加别名;您可以在您自己的函数/ cmdlet上创建别名。 – EBGreen

6

您可以创建参数别名为自己的功能,像这样:

function ParamAlias { 
    param(
     [Alias('fg','fColor')] 
     $ForegroundColor 
    ) 

    Write-Host "$ForegroundColor" -ForegroundColor $ForegroundColor 
} 

ParamAlias -fg Green 
ParamAlias -fColor Green 

然后,您可以使用此技术与Proxy CmdLets你自己的别名添加到现有的cmdlet。但是,我发现在控制台中使用现有的参数别名/缩短的参数名称就足够了,并且不应该在脚本中使用别名,所以我不确定这是否值得付出努力。我会与@ Shay的回答

1

给定cmdlet的参数只需要有足够的参数使其在该cmdlet中不同。像Get-Member -m属性(-m代表MemberType,这是此cmdlet的唯一“M”参数)。

如果我输入一个快速的单行字符,我倾向于只使用参数的前3个字符。这在大多数情况下都是有效的,如果你曾经使用过它,那么它与思科的CLI类似。无论何时,我都会在调试时选中参数,以确保我引用了正确的参数。

IMO,我尽量不要在脚本中做太多。我试图让我的脚本尽可能易读,但其他人可能不知道每个cmdlet的别名。它有助于将脚本传递给其他人。如果你阅读Don Jones的博客/文章,他也会谈论这一点。但是,如果脚本仅适用于我,我尽可能简短快捷。

相关问题