programing

PowerShell 5.1 - 현재 사용 중인 모듈을 제거하는 방법

mailnote 2023. 10. 8. 10:18
반응형

PowerShell 5.1 - 현재 사용 중인 모듈을 제거하는 방법

우리는 일부 PowerShell 모듈을 하나의 배포 PowerShell 스크립트에 사용하고 있습니다.다음 명령을 사용하여 모듈(즉, XXXX)을 "C:\프로그램 파일\Windows PowerShell\Modules".

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

이제 이 모듈의 기능을 사용하면 다음 명령을 사용하여 배포 스크립트가 끝날 때 제거합니다.

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

그러나 이 uninstall module 명령은 다음과 같은 오류를 발생시킵니다.

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 세션(네스트 세션)을 시작해 보고 마지막에 종료합니다.

E Becker의 원래 답변에서 언급한 것처럼, 모듈이 세션에서 고착될 수 있습니다.PowerShell 세션을 닫고 새 세션에서 제거를 실행하면 도움이 됩니다.

자동로딩 처리

Keith가 언급한 것처럼 모듈이 자동으로 로드되면 모듈이 잠길 수 있습니다.프로필을 통해 발생하는 경우 추가-NoProfile제거 스크립트를 사용하면 다음과 같은 효과를 얻을 수 있습니다.

powershell -NoProfile -Command "Uninstall-Module X"

PSReadLine과 같은 일부 모듈은 이러한 세션에서도 로드되므로 추가 작업이 필요할 수 있습니다.-NonInteractive인수:

powershell -NoProfile -NonInteractive -Command "Uninstall-Module X"

아직 그런 경우를 찾지 못했지만 그래도 도움이 안 된다면 다음을 이용할 수 있습니다.(Get-InstalledModule -Name X).InstalledLocation모듈이 설치된 위치를 찾고 다른 방법으로 모듈을 제거합니다(마지막 수단).다른/이전 버전의 모듈이 PowerShell과 함께 번들로 제공된 경우 파손되지 않도록 수동으로 제거하는 것이 좋습니다.

해결 방법

  • 이 경우에는 제거가 필요하지 않을 수도 있으며, 모듈을 설치하고 보관하며 다음과 같이 업데이트할 수도 있습니다.Update-InstalledModule필요할때는?
  • 많은 모듈을 설치하지 않고 가져올 수 있습니다.Import-Module.psd1 파일의 경로로 작동할 가능성이 높습니다.하지만, 그것은 그들을 이해할 수 없습니다.Remove-Module100% 일을 하다
  • 보안이 우려되는 경우 서비스 사용자에 한해 모듈을 설치할 수 있습니다.Install-Module -Scope CurrentUser, 및/또는 PowerShell 사용 제한을(를)Set-ExecutionPolicy하여 실행할 수 .-Scope논쟁도.

제 경우에는 이렇게 해결했습니다.

  1. PowerShell을 닫습니다.
  2. 파워쉘을 닫으세요.작업 관리자를 열고 powershell.exe/pwsh.exe와 같이 PowerShell의 배경 인스턴스를 찾습니다.
  3. C:에서 원하지 않는 모듈 폴더를 삭제합니다.\Users\${USER}\문서\PowerShell\모듈

2021년 말 현재 pwsh7.2와 PSFzf 모듈에 대해서도 동일한 문제에 직면해 있습니다.효과가 있었던 일:

  1. Close/Force 작업 관리자를 통해 PowerShell/pwsh의 모든 인스턴스를 닫습니다.
  2. 프로파일 없이 pwsh의 새 인스턴스를 시작합니다.Win+R >pwsh -NoProfile
  3. 실행.Uninstall-Module -Name PSfzf -Force

언급URL : https://stackoverflow.com/questions/42626470/powershell-5-1-how-to-uninstall-module-which-is-currently-use

반응형