PowerShell Memo

このサイトはPowerShell(MSH/Monad)奮闘記です

管理人「newpops吉岡洋」が
「PowerShell(旧名:MSH/Monad)」の研究結果を日々綴っていきます。

【お知らせ】
この日記からPowerShellのTipsを抽出し「PowerShell FAQ」として整理しました。


2005-11-28

[].NET2.0(RTM)用の「Monad Beta2」(2)

「set-alias」のエラー

.NET2.0Beta2用「Monad Beta2」から.NET2.0(RTM)用の「Monad Beta2」にアップグレードすると、

MSH起動時に以下のような「set-alias」のエラーが多数発生します。

set-alias : The AllScope option cannot be removed from the alias 'cat'.

At C:\Documents and Settings\All Users\Documents\msh\profile.msh:9 char:10

Monadは以下の「profile.msh」を起動時に読み込みますが、

  • 「<All Usersのマイドキュメント>\MSH\profile.msh」
  • 「<マイドキュメント>\MSH\profile.msh」

これらのファイルの「set-alias」の行がエラーとなってしまいます。


内部定義のエイリアス

この問題は、.NET2.0(RTM)用の「Monad Beta2」から「基本的なAliasを内部定義する」仕様に変更された事に起因します。


.NET2.0(RTM)用「Monad Beta2」では、「cat」「cd」などの基本的な「Alias」は、profile.mshが読み込まれる前に内部定義されます。そのため、「profie.msh」でAliasを再定義しようとするとAliasが上書きできずにエラーが発生するのです。

内部定義されるエイリアス

ac, clc, cli, clp, clv, cpi, cpp, cvpa, epal, epcsv

fc, fl, foreach, ft, fw, gal, gc, gci, gcm, gdr

ghy, gi, gl, gm, gp, gps, group, gsv, gu, gv

icm, ihy, ii, ilal, ipal, ipcsv, mi, mp, nal, ndr

ni, nv, oh, rdr, ri, rni, rnp, rp, rv, rvpa

sal, sasv, sc, select, si, sl, sleep, sort, sp, spps

spsv, sv, where, cat, cd, clear, cp, h, history, kill

lp, ls, mount, mv, popd, ps, pushd, pwd, r, rm

rmdir, echo, cls, chdir, copy, del, dir, erase, move, rd

ren, set, type

エラーの回避方法は2つ。

  1. 「profile.msh」のファイル上からset-aliasの二重定義を削除する
  2. 「profile.msh」でエイリアスを削除してから再定義する

1が良いでしょう。



2を実践する場合は以下のように入力します。

エイリアス削除の例
MSH C:\> remove-item alias:cat -force
MSH C:\> set-alias cat  get-content

「set-location」のスコープ

「set-alias」の「-Option」オプションではエイリアスのスコープを定義します。

.NET2.0(RTM)用「Monad Beta2」ではスコープに「None」と「AllScope」が追加されているようです。

#内部定義エイリアスのスコープは「AllScope」です。


エイリアスのスコープ
  • None(.NET2.0(RTM)用「Monad Beta2」から追加)
  • ReadOnly
  • Constant
  • Private
  • AllScope(.NET2.0(RTM)用「Monad Beta2」から追加)

#Noneはどのような挙動なのでしょうか?

Connection: close