トップ回答者
カンマを含むオプション入力に変数を使用したい( Select-Object -Property "Mode,Name")

質問
-
お世話になります。
環境は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が分かれた出力を得ることが
できるでしょうか。
よろしくお願いします。
回答
-
$str = "Mode", "Name"
$LL | Select-Object $str
のように直接,(カンマ)演算子で配列を生成し、$str変数に格納するのでも良いかと思います。
Select-Object Mode, Name
としているのも、実は前述のコードと同様、「カンマ演算子を用い、文字列配列をSelect-Objectコマンドレットのパラメータに与える」という意味になっています。
コマンドレットのパラメータで文字列を指定する場合、$、(、"等の特定の文字以外の文字から始まる文字列(ここではModeやName)については、""で括らなくとも、文字列として扱うというPowerShellの仕様によるものです。- 回答としてマーク seebookf91 2016年4月20日 13:22
すべての返信
-
$str = "Mode", "Name"
$LL | Select-Object $str
のように直接,(カンマ)演算子で配列を生成し、$str変数に格納するのでも良いかと思います。
Select-Object Mode, Name
としているのも、実は前述のコードと同様、「カンマ演算子を用い、文字列配列をSelect-Objectコマンドレットのパラメータに与える」という意味になっています。
コマンドレットのパラメータで文字列を指定する場合、$、(、"等の特定の文字以外の文字から始まる文字列(ここではModeやName)については、""で括らなくとも、文字列として扱うというPowerShellの仕様によるものです。- 回答としてマーク seebookf91 2016年4月20日 13:22