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
これを解決するアイデアはありますか?
問題は、既存のPowerShellセッションが、モジュールをアンロードしようとしても、そこから可能な要素(グローバル変数や定数など)をロードすることでモジュールを「ロック」していることです(Remove-Module
)。
ロックされていないことを確認する最もクリーンな方法は、PowerShellセッションを終了することです。後で「何か」を行うためにセッションを維持する必要がある場合は、モジュールを使用する直前に新しいPowerShellセッション(ネストされたセッション)を開始し、最後に終了します。