PowerShellモジュールに関しては適当にinstall-moduleとやっておけば動くのでこれまであまり深く考えたことはなかったのですが、今日、DSC関連で結構苦労してしまったので書き残しておきます。
まず、Install-Moduleでモジュールをインストール。
https://docs.microsoft.com/ja-jp/powershell/module/powershellget/install-module?view=powershell-7.2
この時に、モジュールが入る場所が複数あります。
- 現在のユーザー用:$HOME\Documents\PowerShell\Modules
- すべてのユーザー用:$env:ProgramFiles\PowerShell\Modules
1と2の切り替えはInstall-Moduleの-Scopeパラメーター。何もスコープを指定しない、あるいは-Scope CurrentUserとすれば「1.現在のユーザー用」に入ります。-Scope AllUsersとすれば「2.すべてのユーザー用」に入ります。
で、これでおしまいではなくて…
- PowerShell自体にWindows PowerShellとPowerShell(Core)がある。
- コマンドによっては別ユーザーのコンテキストで実行されるものがある。
- 複数バージョンを混在させることも可能
という要素もあり、複雑です。
モジュールを読み込む場所自体は「$Env:PSModulePath」で参照可能です。
私が今日ハマったのはStart-DscConfiguration実行時にモジュールが見つからないといわれてしまうという事象でした。どうやらWindowsPowerShellのモジュールディレクトリ(C:\Program Files\WindowsPowerShell\Modules)からしかモジュールを探してくれていなかったので、手動でモジュールをコピーして回避してしまいました。
これまで「動いているからいいや」ということであまりよく仕組みを調べずにやり過ごしてきてしまいましたが、それではうまくいかないケースに遭遇したのでこれを機にきちんとどこに存在するモジュールが使用されているのかなども意識していこうと思います。