2011-08-31 116 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的博客/文章,他也會談論這一點。但是,如果腳本僅適用於我,我儘可能簡短快捷。