[PS1] PowerShell のエイリアスの罠

2012年3月28日

 PowerShell では Alias が設定されているため、コマンドプロンプト時代の DIR や CD コマンドが使えます…と思ったら火傷の元で、思ったように動かず変な罠にはまったりします。

 たとえば、コマンドプロンプトで

CD C:WINDOWS
CD
DIR /W

とした場合の結果は以下ですが。

 同じことを PowerShell 上で実行すると以下のようになります。

 先頭の「CD C:WINDOWS」は OK です。正しくディレクトリに移動します。(実はこれも厳密には嘘。後述)
 次の「CD」はエラーは出ません。が、コマンドプロンプトでは表示されたカレントディレクトリが表示されません!
 そして最後の「DIR /W」に至っては、エラーが出てしまいます。

 なぜかと言えば、CD も DIR もとあるコマンドレットのエイリアスであって、厳密に CD や DIR をエミュレーションしているわけではないからです。

 CD は Set-Location のエイリアスです。したがって、カレントディレクトリの設定はできるものの、カレントディレクトリの表示はしません。カレントディレクトリを表示する場合は、別のコマンドレット Get-Location が担当です。
 DIR は Get-ChildIetm のエイリアスです。しかし、Get-ChildIetm には /W なんてオプションは渡せないのでエラーになってしまいます。

 また、CD は カレントディレクトリの設定なら万事 OK かというとそうではなくて。
 たとえば C:WINDOWS にいるときに、CD D:、とかやるとコマンドプロンプトと Powershell とで結果が変わります。

 なので、結局エイリアスといっても、コマンドプロンプトと同じようには動いてくれないので、できるだけあてにしないほうが吉です。でもコマンドが長すぎる!と思うなら、

Get-Location は GL
Set-Location は SL
Get-ChildItem は GHI

とかあるようなので、こちらに慣れたほうがよさそうです。

 しかし、画面消去は「CLEAR-HOST」と書くよりは「CLS」のほうが好きかな。パラメータ指定がないために、コマンドプロンプトと差が出ないので。

 改めてエイリアスにチよるのは怖いなと思ったのでまとめてみました。
 ただ、エイリアスはよく使うコマンドレットの一覧という側面があると思うので、どんなコマンドが定義されているか、一度は眺めて知っておくと、PowerShell がより使いやすくなる気がします。






カテゴリー: PowerShell, Windows

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org