使用されていない PowerShell モジュールを効果的に削除する方法

PowerShellモジュールを整理したいと思いませんか?古いモジュールや使われていないモジュールがアンインストールを試してもそのまま残ってしまうことがあります。あるいは、競合の原因となっているモジュールを削除したい場合もあるでしょう。モジュールがセッションに読み込まれたままだったり、システムディレクトリにファイルが残っているためにアンインストールできないという問題はよくあります。このガイドでは、ローカルでもリモートでも、クリーンアッププロセスをスムーズにし、システムに影響を及ぼさずに頑固なモジュールを削除する方法を説明します。

Get-InstalledModuleUninstall-Moduleなどのコマンドや、 $env:PSModulePathの操作に慣れることで、多くの一般的な問題を解決できるようになります。モジュールの強制アンロード、PowerShell を-NoProfileで起動して自動ロードの動作をオーバーライドする方法、PowerShell によるアンインストールがうまくいかなくなった場合に残ったファイルを手動で削除する方法などについて学ぶことになります。これらの問題に遭遇したことがある方、または通常の方法を試してもモジュールが再インストールされたり、スタックしたりする場合は、この記事が次に何をすべきかのヒントになるはずです。

WindowsでPowerShellモジュールを適切に削除する方法

削除するインストール済みモジュールの検索

まず、実際にインストールされているものを一覧表示する必要があります。Running を実行してください。Install -ModuleGet-InstalledModuleで登録されたすべてのサードパーティ製モジュールが表示されます。例えば:

Get-InstalledModule

このコマンドは、特にどのバージョンがインストールされているか不明な場合や複数のバージョンが存在する場合に、簡単な概要を表示します。設定によっては、モジュールがデフォルトのリポジトリにインストールされている場合もありますが、カスタムディレクトリにインストールされている場合もあります。-ListAvailable を追加すると、利用可能なすべてのモジュールとそのパスを確認できます。

Get-Module -ListAvailable | Select-Object Name, Version, Path

パスは、モジュールファイルが実際に存在する場所を示します。多くの場合、C:\Users\%username%\Documents\WindowsPowerShell\Modulesや のようなパスになりますC:\Program Files\WindowsPowerShell\Modules。後でファイルを手動で削除する必要がある場合は、これらのパスを覚えておいてください。PowerShell Core (7.x) には、Program Filesや WindowsApps フォルダー下のディレクトリなど、追加のパスがいくつかあり、これが複雑になる場合があります。

モジュールを安全に取り外す

モジュールが使用中の場合(現在のセッションにロードされている場合など)、削除しようとするとエラーが発生する可能性があります。通常は コマンドをUninstall-Module -Name ModuleName使用しますが、モジュールが使用中である、または権限がないというメッセージが表示されて失敗する場合もあります。このような場合は、モジュールをアンロードすると解決する場合があります。 でロード済みのモジュールの一覧を表示し、Get-Moduleメモリ内にあるかどうかを確認します。

Get-Module

モジュールを見つけたら、 を実行してアンロードできますRemove-Module -Name ModuleName。多くの場合、これで問題なく再度実行できます。ただし、強制的にアンインストールするには-ForceUninstall-Moduleを追加する必要がある場合もありますが、他のモジュールがそのモジュールに依存している場合はリスクがあります。設定によっては、特にモジュールが起動時に自動ロードされなくなった場合は、アンロードするだけで十分な場合があります。

Uninstall-Module -Name PSWindowsUpdate -Force

もう1つの方法は、プロファイルファイルを使用せずにPowerShellを起動することです。これにより、起動時にモジュールが自動読み込みされます。PowerShellを起動するには、-NoProfile次のようにします。

Powershell.exe -NoProfile -Command "Uninstall-Module ImportExcel"

こうすることでクリーンなセッションが実行され、モジュールが自動インポートされなくなり、アンインストールが容易になります。一部のマシンでは、モジュールが使用されていても全くロードされないため、エラーを回避できます。

永続モジュールと残存ファイルの処理

プロファイルスクリプトや自動インポートなどによって起動時にモジュールが読み込まれる場合、自動読み込みを抑止する必要があるかもしれません。さらに、アンインストール後もモジュールディレクトリにファイルが残っていることがよくあります。そのため、必要に応じてモジュールフォルダを手動で削除する必要があります。モジュールを見つけてファイルを消去する簡単なスニペットを以下に示します。

$Module = Get-Module ImportExcel -ListAvailable Uninstall-Module $Module. Name -Verbose Remove-Item $Module. ModuleBase -Recurse -Force

Remove-Item -Recurse -Forceは強力ですが、間違ったパスを指定すると危険なので注意が必要です。削除する前に、必ず出力結果のパスをGet-Module再確認してください。

モジュールをリモートでアンインストールする

リモートサーバーやワークステーションを管理している場合は、Invoke-Command同じコマンドをリモートで実行できます。例:

Invoke-Command -ComputerName mun-dc01 -ScriptBlock { Uninstall-Module PSWindowsUpdate -RequiredVersion 2.2.1.2 -Force -Verbose }

便利ですが、適切な権限とPowerShellリモート処理の有効化が必要です。また、ローカルポリシーによってモジュールの削除が制限される場合もあるので、ご注意ください。

再インストールを繰り返すモジュールの対処

再起動または再ログイン後もモジュールが繰り返し表示される場合は、プロファイルスクリプトまたはGPO(グループポリシー)によって自動ロードされている可能性があります。C :\Users\%username%\Documents\WindowsPowerShell\Profile.ps1-NoProfileまたはシステムポリシーを確認する必要があるかもしれません。モジュールが自動的にロードされる場合は、削除する直前にPowerShellを起動することを検討してください。

モジュールがどうしても動かない場合の最後の手段は、ファイルシステムからそのフォルダを手動で削除することです。ただし、依存関係が壊れたり、その他の奇妙な問題が発生する可能性があるため、もう必要ないことが確実な場合にのみ実行してください。