以下の内容はhttps://tech.guitarrapc.com/entry/2013/02/05/210202より取得しました。


PowerShell 3.0で入力パラメータを短くできるのか

できます。 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だけでは、引数がAllAliasかを一意に特定できないためエラーが返ってきます。

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

この場合、allaliとすれば、引数が一意に定まるため実行されます。

※ 当然alでも上記と同様のエラーが返ってきます。

gcm -C all
gcm -C ali

Select-Objectでのスクリプトブロックへの活用

Aliasや短縮を活用するのは、主にコマンドモード(Console)です。

ただし、式モードでもささやかながら使えそうな場面があります。それが、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行目のlabelexpressionを、2行目ではleに置き換えています。結構便利ですしScript Block触る人なら流石に……っていうのは甘いのでしょうか?

まとめ

PowerShell 3.0 (1.0からのはず?)では、コマンドのAlias以外にも、入力パラメータや引数を一意に絞れれば省略が可能です。 コード規則とか可読性と上手くお付き合いして、活用すると記述が楽になります。

「動詞-名詞」の規則はとかいう突込みは…。 まぁ、そもそもIntellisenceさんやタブ補完でフルネーム入力に慣れている私がいうのもなんですが。

参考

#PSTip Argument disambiguation in PowerShell 3.0




以上の内容はhttps://tech.guitarrapc.com/entry/2013/02/05/210202より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14