PowerShellは暗黙の型変換がんばりすぎ

[datetime]を受けるパラメータに値渡すときいつもGet-Dateしてたんだけどいらなかったんだなーって昨日気付いた
PowerShell的には当たり前なことだし似たようなことはじゃんじゃかやってるので今更感すごいんだけど、意識してなかったので気付いちゃったらふえぇってなったというお話

# 今まで
PS> &{param([datetime] $datetime) return $datetime} (Get-Date 5/20)

2015年5月20日 0:00:00

# これでよかった
PS> &{param([datetime] $datetime) return $datetime} 5/20

2015年5月20日 0:00:00

# そもそもGet-Dateが[datetime]受けてたんだわ
PS> help Get-Date -Parameter date

-Date <datetime>

    必須                         false
    位置                         0
    パイプライン入力を許可する   true (ByValue, ByPropertyName)
    パラメーター セット名           (すべて)
    エイリアス                      LastWriteTime
    動的                     false

きっと[datetime]::Parse()出来る文字列は[datetime]にされるのだ
こんなのもありだ

PS> [datetime] '5/20'

2015年5月20日 0:00:00

柔軟過ぎるキャストが出来てこわい

PS> [uri] http://hogehoge
PS> [xml] (cat hoge.xml)

ほかにもよくやるやつ

PowerShellががんばりすぎた結果どっかで痛い目見そうでこわいですね

だいじょうぶPowerShellはこわくないよ

追記:
比較演算子挟んだ時なんかもがんばるよ

PS> ls | ? {$_.LastWriteTime -ge '5/1'}
# 5/1以降に更新されたファイルを列挙

LastWriteTime[datetime]なので'5/1'もこっそり[datetime]になるんだろう

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中