powershell cmdlet参数的较短版本

powershell cmdlet参数的较短版本,powershell,parameters,alias,cmdlet,Powershell,Parameters,Alias,Cmdlet,考虑到我的研究,我不认为以下是容易做到的,如果有的话。不过,作为最后的手段,我想我还是在这里查一下 在Powershell 2.0中,我想找到一种方法,将参数的(令人烦恼的)长名称减少到各种cmdlet中。我想绝对控制速记版本的外观。(而不是从属于PS使用的任何参数。) 例如,我希望能够做这样的事情: # Command goes on this first line to alias "-ForegroundColor" to "-fg" # Command goes on this seco

考虑到我的研究,我不认为以下是容易做到的,如果有的话。不过,作为最后的手段,我想我还是在这里查一下

在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."
我最接近这个功能的是什么?如何实现?我无法使用“获取有关参数的帮助”找到任何有关参数缩写的信息

谢谢

检查此脚本:

点源代码并执行以下命令,它提供了大量有关命令参数的信息。查看“别名”列,它将显示所有内置参数别名,并计算可用于参数的最短名称:

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

类似的内容将为您提供cmdlet参数的现有别名:

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

但我真的看不到“控制”别名的方法。

您可以为自己的函数创建参数别名,如下所示:

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

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

ParamAlias -fg Green
ParamAlias -fColor Green

然后,您可以使用此技术将自己的别名添加到现有cmdlet中。但是,我发现在控制台中使用现有的参数别名/缩短的参数名称就足够了,而且不应该在脚本中使用别名,因此我不确定这是否值得。我同意@Shay的答案,给定cmdlet的参数只需要有足够的参数就可以在该cmdlet中区分。例如Get Member-m属性(-m代表MemberType,这是此cmdlet的唯一“m”参数)

如果我快速输入一行,我倾向于只使用参数的前3个字符。这在大多数情况下都有效,如果您曾经使用过它,它与Cisco的CLI类似。在调试时,我会不时地将该参数标记出来,以确保引用的是正确的参数


在我看来,我尽量不在脚本中做太多。我尽量使我的脚本对其他可能不知道每个cmdlet别名的人具有可读性。它有助于将脚本传递给其他人。如果你读了唐·琼斯的博客/文章,他也会谈到这一点。但是,如果脚本只是为我编写的,我会尽可能地使其简短和快速。

这是因为它们通常不是别名。它是一种自适应消歧算法。在您自己编写的高级函数中,您可以为参数指定别名,但即使不指定任何内容,它们也会自行消除歧义。@EBGreen-对不起,我不明白您的意思。根据OP的问题,
-ForeGroundColor
需要有别名
fg
,而
f
fo
for
等用于消歧。这和你说的是同一点吗?嗯,我说的不清楚。没有什么新鲜事。我想我想说的是,大多数人认为参数的别名实际上只是消歧算法。正如您的代码所示,还有实际的别名。我想从我的评论中得出的结论应该是,很多人们通常认为是别名的东西实际上并不是;无法在内置cmdlet上添加别名;您可以在自己的函数/cmdlet上创建别名。@EBGreen-Ok现在更有意义:)您只需键入足够多的参数字母即可消除歧义:write host-f green-b blue hello@拉洛德,我想你的代码片段中有一个输入错误。我无法修复它,因为它只有1个字符(编辑最少6个字符)。