sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

Install-ModuleしたのにImport-Moduleできない時の対処

PowerShellでImportExcelモジュールを使いたくてインストールしたんですが、PowerShellウィンドウを開いてImport-Moduleすると問題ないのに、スクリプトからImport-Moduleするとエラーがなぜか出て困ったのでメモ。

 

環境

モジュールはインストールされている状態です。

PS C:\Users\takashi.nasu> Get-installedModule

Version              Name                                Repository           Description
-------              ----                                ----------           -----------
7.8.6                ImportExcel                         PSGallery            PowerShell module to import/export Excel…

 

事象

スクリプト内からImport-Moduleを実行すると以下のようなエラーになりました。

PS C:\Users\takashi.nasu\Downloads> powershell.exe -ExecutionPolicy Bypass -File .\manage_iam_users.ps1
Import-Module : モジュール ディレクトリに有効なモジュール ファイルが見つからなかったため、指定されたモジュール 'ImportE
xcel' は読み込まれませんでした。
発生場所 C:\Users\takashi.nasu\Downloads\hoge.ps1:2 文字:1
+ Import-Module ImportExcel
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (ImportExcel:String) [Import-Module], FileNotFoundException
    + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Excel : 用語 'Import-Excel' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前とし
て認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、
再試行してください。
発生場所 C:\Users\takashi.nasu\Downloads\hoge.ps1:8 文字:14
+ $excelData = Import-Excel -Path $excelPath -StartRow 3
+              ~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Import-Excel:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

 

モジュールの場所を確認

PS C:\Users\takashi.nasu> Import-Module ImportExcel -PassThru -Verbose
VERBOSE: Loading module from path 'C:\Users\takashi.nasu\OneDrive\ドキュメント\PowerShell\Modules\ImportExcel\7.8.6\ImportExcel.psd1'.
...以下省略

なんかよくわからないけどOneDriveの中にモジュールがインストールされてしまったようです。

 

対処

ググってみると、C:\Program Files\WindowsPowerShell\Modules に配置されるのが正しいみたいなので、以下のコマンドでモジュール一式を生成してあるべき場所に配置しました。

Save-Module -name ImportExcel -Path .\

上記で生成されたモジュール一式を C:\Program Files\WindowsPowerShell\Modules に配置することで無事にスクリプトからImport-Module実行できました。