8

鉴于我的研究,我不相信以下是容易完成的,如果有的话。然而,作为最后的手段,我想我会在这里检查。

在 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

4 回答 4

16

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

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

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

ParamAlias -fg Green
ParamAlias -fColor Green

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

于 2011-09-01T00:00:08.863 回答
14

检查此脚本:Get-Parameter.ps1

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

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
于 2011-08-31T20:22:49.490 回答
2

像这样的东西会给你一个 cmdlet 参数的现有别名:

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

不过,我并没有真正看到“控制”别名的方法。

于 2011-08-31T20:53:46.190 回答
2

给定 cmdlet 的参数只需要有足够的参数以使其在该 cmdlet 中与众不同。Get-Member -m Property 之类的东西(-m 代表 MemberType,这是此 cmdlet 的唯一“M”参数)。

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

IMO,我尽量不在脚本中做太多。对于可能不知道每个 cmdlet 别名的其他人,我尽量让我的脚本具有可读性。它有助于将脚本传递给其他人。如果您阅读 Don Jones 的博客/文章,他也会谈到这一点。但是,如果脚本只适合我,我会尽可能短且快速。

于 2011-09-01T03:40:03.847 回答