PowerShell コマンドレットにおけるカッコの意義について考察しろ!
コマンドレットのメンバーにアクセスする場合、気をつけねばならぬことがある。
Get-Dateコマンドレットを例にして、それを述べたい。
Get-Dateコマンドレットは日付時刻を取得するコマンドレットだ。
コンソールにそのまま叩き込むと、結果は以下の通り表示される。
ここで、よくありがちな、yyyy/MM/dd形式の結果が欲しいときはどうしたらいいか?
無論、PowerShell様、.NET Framework様ゆえ、オブジェクトのメソッドにそいつはある。
ToStringメソッドだ。引数に書式を設定するだけで簡単に結果をgetできるはずであるが......
以下、「PowerShellやるゾウ君」と、「天の声」でいくゼ!
PowerShellやるゾウ君
PowerShell様、.NET Framework様、こいつでおねげぇしやす!
ひゃっ、ひゃっ、ひゃっ。
Get-Date.ToString("yyyy/MM/dd")
ぬわんと!エラーが出たやないけ。
どうなっとるんやぁ、PowerShell様、.NET Framework様。
メソッド間違っとらへんかなぁ.....。確認するために、こいつを叩き込んでみよ。
Get-Date | gm | Where{$_.Name -eq "ToString"}
メソッドあるげ!何であかんかもう分からんわ。
俺、何も悪いことしてへんぞ。このタニシ!
とりあえず、もうやる気ねぇべ。
天の声
喝!!!!!!
もうおめえ、めんどくさいから先に答え言うわ。
コマンドレットに、カッコつけるだけじゃ!
(Get-Date).ToString("yyyy/MM/dd")
カッコをつける理由は、コマンドレットが完了してから、返されたオブジェクトのメソッドにアクセスする必要があるからじゃ!
たった1行でyyyy/MM/dd形式を得ているが、イメージ的には以下のように、2行に渡ってやっていることを簡略化したようなもんである。
$date = Get-Date
$date.ToString("yyyy/MM/dd")
今回はGet-Dateコマンドレットが命題であったが、これが現在のロケーションを取得するGet-Locationコマンドレットであろうが、同じことである。
Get-Locationコマンドレットを使って、ロケーションのパス文字列だけを取得したいのであれば、以下のようにする。
(Get-Location).Path
カッコのなかでコマンドレットを完了したあと、コマンドレットのプロパティにアクセスしているのである。
分かったか?
分かったら、歯磨いて寝ろ!
PowerShell、イエーイ!