다음을 통해 공유


about_PSModulePath

간단한 설명

이 문서에서는 $Env:PSModulePath 환경 변수의 용도 및 사용에 대해 설명합니다.

긴 설명

$Env:PSModulePath 환경 변수에는 폴더 위치 목록이 포함되어 있습니다. PowerShell은 각 폴더에서 모듈(.psd1 또는 .psm1) 파일을 재귀적으로 검색합니다.

기본적으로 $Env:PSModulePath 할당된 유효 위치는 다음과 같습니다.

  • CurrentUser 범위에 설치된 모듈:
    • Windows에서 이러한 모듈은 $HOME\Documents\PowerShell\Modules저장됩니다. Documents 폴더의 특정 위치는 Windows 버전 및 폴더 리디렉션을 사용하는 경우에 따라 다릅니다. 또한 Microsoft OneDrive는 Documents 폴더의 위치를 변경할 수 있습니다. Documents 폴더의 위치를 확인하려면 [Environment]::GetFolderPath('MyDocuments')명령을 사용합니다.
    • 비 Windows 시스템에서 이러한 모듈은 $HOME/.local/share/powershell/Modules 폴더에 저장됩니다.
  • AllUsers 범위에 설치된 모듈:
    • Windows에서 이러한 모듈은 $Env:ProgramFiles\PowerShell\Modules저장됩니다.
    • 비 Windows 시스템에서 이러한 모듈은 /usr/local/share/powershell/Modules저장됩니다.
  • PowerShell과 함께 제공되는 모듈은 $PSHOME\Modules저장됩니다.

메모

PowerShell 모듈을 포함하는 애플리케이션은 Program Files 폴더와 같은 Windows의 다른 디렉터리에 모듈을 설치할 수 있습니다. 설치 관리자 패키지가 $Env:PSModulePath위치를 추가하지 않을 수 있습니다.

Windows PowerShell 5.1의 기본 위치는 PowerShell 7과 다릅니다.

  • CurrentUser 범위에 설치된 모듈은 $HOME\Documents\WindowsPowerShell\Modules저장됩니다.
  • AllUsers 범위에 설치된 모듈은 $Env:ProgramFiles\WindowsPowerShell\Modules저장됩니다.
  • $PSHOME\Modules저장된 Windows PowerShell과 함께 제공되는 모듈은 $Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules.

PowerShell PSModulePath 생성

$Env:PSModulePath 값은 PowerShell이 시작될 때마다 생성됩니다. 값은 PowerShell 버전 및 실행 방법에 따라 다릅니다.

Windows PowerShell 시작

Windows PowerShell은 다음 논리를 사용하여 시작 시 PSModulePath 생성합니다.

  • PSModulePath 없는 경우 CurrentUser, AllUsers$PSHOME 모듈 경로를 결합합니다.
  • PSModulePath 있는 경우:
    • PSModulePath $PSHOME 모듈 경로가 포함된 경우:
      • AllUsers 모듈 경로가 $PSHOME 모듈 경로 앞에 삽입됩니다.
    • 다른:
      • 사용자가 의도적으로 PSModulePath 위치를 제거했기 때문에 정의된 대로 $PSHOME 사용

CurrentUser 모듈 경로는 사용자 범위 $Env:PSModulePath 없는 경우에만 접두사로 지정됩니다. 그렇지 않으면 사용자 범위 $Env:PSModulePath 정의된 대로 사용됩니다.

PowerShell 7 시작

Windows에서 대부분의 환경 변수에 대해 사용자 범위 변수가 있는 경우 새 프로세스는 동일한 이름의 컴퓨터 범위 변수가 있는 경우에도 해당 값만 사용합니다. 환경 변수에 경로는 다르게 처리됩니다.

Windows에서 PSModulePathPath 환경 변수를 처리하는 방법과 유사하게 처리됩니다. Path 다른 환경 변수와 다르게 처리됩니다. 프로세스가 시작되면 Windows는 사용자 범위 Path 컴퓨터 범위 Path결합합니다.

  • 사용자 범위 PSModulePath 검색
  • 상속된 PSModulePath 환경 변수 처리 비교
    • 동일한 경우:
      • 환경 변수의 의미 체계에 따라 PSModulePathPATH 끝에 추가합니다.
      • Windows System32 경로는 PSModulePath 정의된 컴퓨터에서 제공되므로 명시적으로 추가할 필요가 없습니다.
    • 다른 경우 사용자가 명시적으로 수정한 것처럼 처리하고 AllUsersPSModulePath 추가하지 않습니다.
  • PS7 사용자, 시스템 및 $PSHOME 경로가 있는 접두사입니다.
    • powershell.config.json 사용자 범위가 지정된 PSModulePath포함된 경우 사용자의 기본값 대신 사용합니다.
    • powershell.config.json 시스템 범위 PSModulePath포함된 경우 시스템의 기본값 대신 사용합니다.

Windows가 아닌 시스템에는 사용자 및 시스템 환경 변수가 분리되어 있지 않습니다. PSModulePath 상속되고 PS7 관련 경로는 아직 정의되지 않은 경우 접두사로 지정됩니다.

PowerShell 7에서 Windows PowerShell 시작

이 설명에서는 Windows PowerShell powershell.exepowershell_ise.exe모두 의미합니다.

$Env:PSModulePath 값은 다음과 같이 수정된 WinPSModulePath 복사됩니다.

  • PS7 사용자 모듈 경로 제거
  • PS7 시스템 모듈 경로 제거
  • $PSHOME 모듈 경로 PS7 제거

PS7 모듈이 Windows PowerShell에 로드되지 않도록 PS7 경로가 제거됩니다. WinPSModulePath 값은 Windows PowerShell을 시작할 때 사용됩니다.

Windows PowerShell에서 PowerShell 7 시작

PowerShell 7 시작은 Windows PowerShell에서 추가한 상속 경로를 추가하여 as-is 계속됩니다. PS7 관련 경로는 접두사이므로 기능 문제가 없습니다.

모듈 검색 동작

PowerShell은 PSModulePath 각 폴더에서 모듈(.psd1 또는 .psm1) 파일을 재귀적으로 검색합니다. 이 검색 패턴을 사용하면 동일한 모듈의 여러 버전을 다른 폴더에 설치할 수 있습니다. 예를 들어:

    Directory: C:\Program Files\WindowsPowerShell\Modules\PowerShellGet

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----           8/14/2020  5:56 PM                1.0.0.1
d----           9/13/2019  3:53 PM                2.1.2

기본적으로 PowerShell은 여러 버전이 발견되면 모듈의 가장 높은 버전 번호를 로드합니다. 특정 버전을 로드하려면 Import-Module 매개 변수와 함께 사용합니다. 자세한 내용은 Import-Module참조하세요.

PSModulePath 수정

대부분의 경우 기본 모듈 위치에 모듈을 설치해야 합니다. 그러나 PSModulePath 환경 변수의 값을 변경해야 할 수도 있습니다.

예를 들어 현재 세션의 C:\Program Files\Fabrikam\Modules$Env:PSModulePath 디렉터리를 일시적으로 추가하려면 다음을 입력합니다.

$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"

명령의 세미콜론(;)은 새 경로를 목록의 앞에 오는 경로와 구분합니다. 비 Windows 플랫폼에서 콜론(:)은 환경 변수의 경로 위치를 구분합니다.

비 Windows에서 PSModulePath 수정

비 Windows 환경의 모든 세션에 대한 PSModulePath 값을 변경하려면 PowerShell 프로필에 이전 명령을 추가합니다.

Windows에서 PSModulePath 수정

모든 세션에서 PSModulePath 값을 변경하려면 PSModulePath 값을 저장하는 레지스트리 키를 편집합니다. PSModulePath 값은 문자열로 레지스트리에 저장됩니다. 확장된 PSModulePath 값을 영구적으로 저장하지 않도록 하려면 하위 키에서 GetValue() 메서드를 사용하고 값을 직접 편집합니다.

다음 예제에서는 확장되지 않은 문자열을 확장하지 않고 C:\Program Files\Fabrikam\Modules 환경 변수 값에 PSModulePath 경로를 추가합니다.

$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)

사용자 설정에 대한 경로를 추가하려면 다음 코드를 사용합니다.

$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)

참고하십시오