web-dev-qa-db-ja.com

PowerShell 5.1-現在使用されているモジュールをアンインストールする方法

1つの展開PowerShellスクリプトでいくつかのPowerShellモジュールを使用しています。次のコマンドを使用して、モジュール(XXXXなど)を「C:\ Program Files\WindowsPowerShell\Modules」にインストールします。

Install-Module -Name "XXXX" -AllowClobber -RequiredVersion "XXXX" -Repository "XXXX" -Scope AllUsers

このモジュールの機能を使用したら、次のコマンドを使用して展開スクリプトの最後にアンインストールします。

Remove-Module -Name "XXXX" -force
Uninstall-Module -Name "XXXX"  -AllVersions -force

ただし、このアンインストールモジュールコマンドでは次のエラーが発生します。

WARNING: The version '###' of module 'XXXX' is currently in use. Retry the operation after closing the
applications.
PackageManagement\Uninstall-Package : Module 'XXXX' is in currently in use.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:2046 char:21
+ ...        $null = PackageManagement\Uninstall-Package @PSBoundParameters
+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Packag
   e], Exception
    + FullyQualifiedErrorId : ModuleIsInUse,Uninstall-Package,Microsoft.PowerShell.PackageManagement.Cmdlets.Uninstall
   Package

これを解決するアイデアはありますか?

15
mit

問題は、既存のPowerShellセッションが、モジュールをアンロードしようとしても、そこから可能な要素(グローバル変数や定数など)をロードすることでモジュールを「ロック」していることです(Remove-Module)。

ロックされていないことを確認する最もクリーンな方法は、PowerShellセッションを終了することです。後で「何か」を行うためにセッションを維持する必要がある場合は、モジュールを使用する直前に新しいPowerShellセッション(ネストされたセッション)を開始し、最後に終了します。

12
E Bekker