간단한 설명
이 문서에서는 $env:PSModulePath 환경 변수의 용도 및 사용에 대해 설명합니다.
긴 설명
$env:PSModulePath 환경 변수에는 모듈 및 리소스를 찾기 위해 검색되는 폴더 위치 목록이 포함됩니다. PowerShell은 각 폴더에서 모듈(.psd1 또는 .psm1) 파일을 재귀적으로 검색합니다.
Install-Module 현재 사용자 또는 모든 사용자에 대해 모듈이 설치되어 있는지 여부를 지정할 수 있는 Scope 매개 변수가 있습니다. 자세한 내용은 Install-Module참조하세요.
기본적으로 $env:PSModulePath 할당된 유효 위치는 다음과 같습니다.
시스템 전체 위치: 이러한 폴더에는 PowerShell과 함께 제공되는 모듈이 포함되어 있습니다. 이러한 모듈은 폴더에 저장됩니다
$PSHOME\Modules.- Windows에서 AllUsers 범위에
$env:ProgramFiles\WindowsPowerShell\Modules설치된 모듈은 . - Windows 이외의 시스템에서는 AllUsers 범위에
/usr/local/share/powershell/Modules설치된 모듈이 .
- Windows에서 AllUsers 범위에
사용자 설치 모듈: Windows에서 CurrentUser 범위에 설치된 모듈은 일반적으로 폴더에 저장됩니다
$HOME\Documents\WindowsPowerShell\Modules.Documents폴더의 특정 위치는 Windows 버전 및 폴더 리디렉션을 사용하는 경우에 따라 다릅니다. 또한 Microsoft OneDrive는Documents폴더의 위치를 변경할 수 있습니다. 다음 명령을[Environment]::GetFolderPath('MyDocuments')사용하여 폴더의 위치를Documents확인할 수 있습니다.Windows 이외의 시스템에서는 CurrentUser 범위에 설치된 모듈이 폴더에 저장됩니다
$HOME/.local/share/powershell/Modules.응용 프로그램별 모듈: 설치 프로그램은 Windows의 폴더와 같은 다른 디렉터리에 모듈을 설치할 수 있습니다
Program Files. 설치 프로그램 패키지는 위치에 위치를 추가하거나 추가하지 않을 수 있습니다$env:PSModulePath.
PowerShell PSModulePath 생성
$env:PSModulePath 값은 PowerShell이 시작될 때마다 생성됩니다.
값은 PowerShell 버전 및 시작 방법에 따라 다릅니다.
Windows PowerShell 시작
Windows PowerShell은 다음 논리를 사용하여 시작 시 PSModulePath 생성합니다.
-
PSModulePath없는 경우 CurrentUser, AllUsers및$PSHOME모듈 경로를 결합합니다. -
PSModulePath있는 경우:-
PSModulePath$PSHOME모듈 경로가 포함된 경우:-
AllUsers 모듈 경로가
$PSHOME모듈 경로 앞에 삽입됩니다.
-
AllUsers 모듈 경로가
- 다른:
- 사용자가 의도적으로
PSModulePath위치를 제거했기 때문에 정의된 대로$PSHOME사용
- 사용자가 의도적으로
-
CurrentUser 모듈 경로는 사용자 범위 $env:PSModulePath 없는 경우에만 접두사로 지정됩니다. 그렇지 않으면 사용자 범위 $env:PSModulePath 정의된 대로 사용됩니다.
PowerShell 7 시작
Windows에서 대부분의 환경 변수에 대해 사용자 범위 변수가 있는 경우 새 프로세스는 동일한 이름의 컴퓨터 범위 변수가 있는 경우에만 해당 값을 사용합니다.
PowerShell 7 PSModulePath 에서는 Windows에서 환경 변수가 처리되는 방식 Path 과 유사하게 처리됩니다. Windows Path 에서는 다른 환경 변수와 다르게 처리됩니다. 프로세스가 시작되면 Windows는 사용자 범위 Path 컴퓨터 범위 Path결합합니다.
- 사용자 범위
PSModulePath검색 - 상속된
PSModulePath환경 변수 처리 비교- 동일한 경우:
-
환경 변수의 의미 체계에 따라
PSModulePathPath끝에 추가합니다. - Windows
System32경로는 정의된PSModulePath컴퓨터에서 가져오므로 명시적으로 추가할 필요가 없습니다
-
환경 변수의 의미 체계에 따라
- 다른 경우 사용자가 명시적으로 수정한 것처럼 처리하고 AllUsers
PSModulePath추가하지 않습니다.
- 동일한 경우:
- PS7 사용자, 시스템 및
$PSHOME경로가 있는 접두사입니다.-
powershell.config.json사용자 범위가 지정된PSModulePath포함된 경우 사용자의 기본값 대신 사용합니다. -
powershell.config.json시스템 범위PSModulePath포함된 경우 시스템의 기본값 대신 사용합니다.
-
Unix 시스템에는 사용자 및 시스템 환경 변수가 분리되어 있지 않습니다.
PSModulePath 상속되고 PS7 관련 경로는 아직 정의되지 않은 경우 접두사로 지정됩니다.
PowerShell 7에서 Windows PowerShell 시작
이 설명에서는 Windows PowerShell powershell.exe 및 powershell_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').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
사용자 설정에 경로를 추가하려면 레지스트리 공급자를 에서 HKLM:\HKCU:\로 변경합니다.
$key = (Get-Item 'HKCU:\').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)