none
カンマを含むオプション入力に変数を使用したい( Select-Object -Property "Mode,Name") RRS feed

  • 質問

  • お世話になります。

    環境はWindows 7 / Powershell 3.0です。

    オプションを変数で記述することは一般的だと思います。

    質問は、Select-ObjectのPropertyオプションで、

    ”カンマを含む”オプションを変数で記述したい、という内容です。

    例)

    $LL = ls

    $LL

    以下4つのメンバーがコンソール表示される。

    Mode LastWriteTime Length Name

    ------- ---------------- --------- -------

    〇〇  〇〇〇〇〇〇  〇〇   〇〇

    ここで、

    $LL | Select-Object Mode,Name

    とすれば、ModeとNameのメンバのみが抽出され以下となります。

    Mode Name

    ------ --------

    〇〇  〇〇

    問題はここからです。

    Mode,Name の部分を$strで置き換えます。

    $str = "Mode,Name"

    そして、上記と同じ結果を予想し以下のコマンドを打ちます。

    $LL | Select-Object $str

    結果は、「Mode,Name」という”1つ”のモードを出力します。

    Mode,Name

    --------------

    どうすれば、$strで置き換えつつ、ModeとNameが分かれた出力を得ることが

    できるでしょうか。

    よろしくお願いします。

    2016年4月19日 14:17

回答

  • $str = "Mode", "Name"
    $LL | Select-Object $str

    のように直接,(カンマ)演算子で配列を生成し、$str変数に格納するのでも良いかと思います。

    Select-Object Mode, Name

    としているのも、実は前述のコードと同様、「カンマ演算子を用い、文字列配列をSelect-Objectコマンドレットのパラメータに与える」という意味になっています。

    コマンドレットのパラメータで文字列を指定する場合、$、(、"等の特定の文字以外の文字から始まる文字列(ここではModeやName)については、""で括らなくとも、文字列として扱うというPowerShellの仕様によるものです。
    • 回答としてマーク seebookf91 2016年4月20日 13:22
    2016年4月19日 16:42
    モデレータ

すべての返信

  • 自己解決しました。

    お騒がせしました。

    $spl = $str -split ","

    $LL | Select-Object $spl

    としたところ、所望の結果となりました。

    ただの文字列($str)ではなく、配列($spl)を入れれば良かったのですね。

    もし間違い、より良い最適解 等があればご教授下さい。

    2016年4月19日 14:27
  • $str = "Mode", "Name"
    $LL | Select-Object $str

    のように直接,(カンマ)演算子で配列を生成し、$str変数に格納するのでも良いかと思います。

    Select-Object Mode, Name

    としているのも、実は前述のコードと同様、「カンマ演算子を用い、文字列配列をSelect-Objectコマンドレットのパラメータに与える」という意味になっています。

    コマンドレットのパラメータで文字列を指定する場合、$、(、"等の特定の文字以外の文字から始まる文字列(ここではModeやName)については、""で括らなくとも、文字列として扱うというPowerShellの仕様によるものです。
    • 回答としてマーク seebookf91 2016年4月20日 13:22
    2016年4月19日 16:42
    モデレータ
  • ご回答ありがとうございます。

    なるほどそういう仕様だったのですね。

    勉強になりました。ありがとうございます。

    2016年4月20日 13:23