罠シリーズをやろうとしているわけではないのですが。あと、今回の罠は、はまる人はあまりいないと思います...。Update-Moduleというのをやります。ところが今回、新しいバージョンが既にリリースされているのに、これをやっても、モジュールが更新されないという現象が起きて、ちょっと調べていました。その名前に反して、既にインストールされているモジュールを更新することはありません。サイドでインストールできるようになっています。新しいバージョンをインストールするだけで、既にインストールされている古いバージョンを削除したり、上書き更新したりはしません。モジュールを読み込む際は、インストールされている複数のバージョンの中から、最新のものが自動的に読み込まれます。今回のモジュールも、新しいバージョンはインストールはされていたのです。それが読み込まれず、古いバージョンが引き続き読み込まれていたのです。(セミコン区切りで複数のパスが)セットされています。ディレクトリ以下にあります。ディレクトリもあります。登録されているパスを、前から順番に見ていきます。そのパス下で指定されたモジュールが見つかれば、それ以上の探索は行いません。先程、複数のバージョンがインストールされている場合は最新のものが読み込まれると言いました。順はそれよりも優先されます。先頭に自動で付加します。スコープでインストールされているモジュールよりも優先されます。マシンスコープの方に新しいバージョンがインストールされていようとも、です。スコープの方に新しいモジュールをインストールしてしまった結果、新しいバージョンが読み込まれなかった、という問題だったわけです。スコープでインストールするかを選ぶことができます。スコープにインストールされます。スコープにインストールすれば、こういう問題を起こすことはできます。パラメーターはありません。インストールされているモジュールのスコープに合わせて、適切な方に新しいバージョンをインストールしてくれます。起こるはずのない問題なんです。ところが、今回はそうはならなかった。内部で新しいバージョンのモジュールのインストールをしていると言いましたね。指定するのかを、どうにかして判断しているわけです。ファイルだったのです。ディレクトリの下にあります。隠しファイル属性がついているので、外してやらないと見えません。このファイルの中を見ると、このような行があります。N="InstalledLocation">C:\Users\aetos\Documents\WindowsPowerShell\Modules\HogeModule\1.0.0.0</S>これはつまり、このファイルがあるディレクトリと同じです。値を決定していたのです。スコープでインストールするのです。パスが変わっていたさて、種明かしです。再インストールを行っています。アカウント名が、予期せず変わってしまったのです。大した問題だと思わず、そのまま使っていました。ディレクトリを復元しました。ファイルも復元されました。値が、古いユーザー名を含むパスだったというわけです。スコープの方にインストールしてしまった、というのが、今回の問題の顛末となります。値を手で書き換えることで解消しました。ディレクトリを、バックアップから復元したり、別のマシンに持って行ったりはしない方がいいよ、ということになりますかね?*1:使われることのない古いバージョンがどんどん溜まってディスクを圧迫するという問題があります。古いバージョンをクリーンアップするコマンドかオプションも提供して欲しいと思います。*2:警告してくれてもよさそうなものです。PowerShellボドゲをしましょう。(1)おことわり当ブログの内容は筆者個人の見解です。筆者が所属するいかなる組織や団体を代表するものでもありません。はてなブログをはじめよう!aetos382さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。