できます。
PowerShell 1.0の頃からだったような?
基本的にはそのパラメータと一意に絞れる程度まで入力すれば、以降の文字は入力せずとも受け付けます。
ではそのサンプルを。
短くしてみよう
良く使われるところで、
Get-Command
を使ってみます。
Aliasに関するコマンドだけを抜き出すには以下のコマンドレットを記述します。
Get-Command -CommandType Alias
ではこのコマンドを短くしてみます。
まずは、コマンド名ですね。
Get-Command
のAliasは
gcm
です、
gcm -CommandType Alias
更に、パラメータの
-CommandType
も短くします。
gcm -C Alias
続けて、引数の
Alias
も短くします。
gcm -C Ali
このようにパラメータが一意に定まる文字さえ入力すれば、コマンド入力を短くできます。
短くできないパターン
では、引数をAにはできないのでしょうか。
gcm -C A
Aだけでは、引数が
All
か
Alias
かを一意に特定できないためエラーが返ってきます。
Get-Command : パラメーター 'CommandType' をバインドできません。値 "A" を型 "System.Management.Automation.CommandTypes" に変換できません。エラー: "次の列挙子名を区別できないため、識別子名 A を処理できません: Alias, Application, All。より詳細な識別子名で試してください。"
発生場所 行:6 文字:8
+ gcm -C A
+ ~
+ CategoryInfo : InvalidArgument: (:) [Get-Command]、ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.GetCommandCommand
この場合、
all
か
ali
とすれば、引数が一意に定まるため実行されます。
※当然alでも上記と同様のエラーが返ってきます。
gcm -C all
gcm -C ali
Select-Objectでのスクリプトブロックへの活用
Aliasや短縮を活用するのは、主にコマンドモード(Console)でかと思います。
式モード(ISEなど)では、コマンドを知らない人のため……という理由でフルネームが使われやすいようで……ぐぬぬ。
ただし、式モードでもささやかながら使えそうな場面があります。
それが、Select-ObjectなどでのScript Block使用時です。
例えば、Processを取得する
Get-Process
コマンドを考えます。
※全然意味のないサンプルですが…すいません。
Get-Process `
| select @{label="Id";expression={"TEST ID: " + $_.Id}},
@{l="Name";e={"TEST NAME: " + $_.Name}}
結果です。
Id : TEST ID: 8640
Name : TEST NAME: Zune
Script Block 1行目の
label
と
expression
を、2行目では
lと
eに置き換えています。
結構便利ですしScript Block触る人なら流石に……っていうのは甘いのでしょうか?
まとめ
PowerShell 3.0 (1.0からのはず?)では、コマンドのAlias以外にも、入力パラメータや引数を一意に絞れれば省略が可能です。
コード規則とか可読性と上手くお付き合いして、活用すると記述が楽になります。
「動詞-名詞」の規則は……とかいう突込みは……。
まぁ、そもそもIntellisenceさんやタブ補完でフルネーム入力に慣れている私がいうのもなんですが。
参考
#PSTip Argument disambiguation in PowerShell 3.0