다음을 통해 공유


PowerShell 모듈 설치

PowerShell 모듈을 만든 후에는 사용자 또는 다른 사용자가 모듈을 사용할 수 있도록 시스템에 모듈을 설치하려고 할 수 있습니다. 일반적으로 모듈 파일(예: .psm1또는 이진 어셈블리, 모듈 매니페스트 및 기타 연결된 파일)을 해당 컴퓨터의 디렉터리에 복사하는 것으로 구성됩니다. 아주 작은 프로젝트의 경우 Windows 탐색기를 사용하여 파일을 복사하여 단일 원격 컴퓨터에 붙여넣는 것만큼 간단할 수 있습니다. 그러나 더 큰 솔루션의 경우 보다 정교한 설치 프로세스를 사용할 수 있습니다. 시스템에 모듈을 가져오는 방법에 관계없이 PowerShell은 사용자가 모듈을 찾고 사용할 수 있도록 하는 다양한 기술을 사용할 수 있습니다. 따라서 설치의 주요 문제는 PowerShell에서 모듈을 찾을 수 있는지 확인하는 것입니다. 자세한 내용은 PowerShell 모듈 가져오기를 참조 하세요.

모듈 설치 규칙

다음 정보는 사용자 고유의 용도로 만든 모듈, 다른 당사자로부터 얻은 모듈 및 다른 사용자에게 배포하는 모듈을 비롯한 모든 모듈과 관련이 있습니다.

PSModulePath에 모듈 설치

가능하면 PSModulePath 환경 변수에 나열된 경로에 모든 모듈을 설치하거나 PSModulePath 환경 변수 값에 모듈 경로를 추가합니다.

PSModulePath 환경 변수($Env:PSModulePath)에는 Windows PowerShell 모듈의 위치가 포함됩니다. Cmdlet은 이 환경 변수의 값을 사용하여 모듈을 찾습니다.

기본적으로 PSModulePath 환경 변수 값에는 다음 시스템 및 사용자 모듈 디렉터리를 포함하지만 값을 추가하고 편집할 수 있습니다.

  • $PSHOME\Modules(%windir%\System32\WindowsPowerShell\v1.0\Modules)

    경고

    이 위치는 Windows와 함께 제공되는 모듈용으로 예약되어 있습니다. 이 위치에 모듈을 설치하지 마세요.

  • $HOME\Documents\WindowsPowerShell\Modules(%HOMEDRIVE%%HOMEPATH%\Documents\WindowsPowerShell\Modules)

  • $Env:ProgramFiles\WindowsPowerShell\Modules(%ProgramFiles%\WindowsPowerShell\Modules)

    PSModulePath 환경 변수의 값을 얻으려면 다음 명령 중 하나를 사용합니다.

    $Env:PSModulePath
    [Environment]::GetEnvironmentVariable("PSModulePath")
    

    PSModulePath 환경 변수 값의 값에 모듈 경로를 추가하려면 다음 명령 형식을 사용합니다. 이 형식은 System.Environment 클래스의 SetEnvironmentVariable 메서드를 사용하여 PSModulePath 환경 변수를 세션 독립적으로 변경합니다.

    #Save the current value in the $p variable.
    $p = [Environment]::GetEnvironmentVariable("PSModulePath")
    
    #Add the new path to the $p variable. Begin with a semi-colon separator.
    $p += ";C:\Program Files (x86)\MyCompany\Modules\"
    
    #Add the paths in $p to the PSModulePath value.
    [Environment]::SetEnvironmentVariable("PSModulePath",$p)
    

    중요합니다

    PSModulePath 경로를 추가한 후에는 변경 내용에 대한 환경 메시지를 브로드캐스트해야 합니다. 변경 내용 브로드캐스트를 사용하면 셸과 같은 다른 애플리케이션에서 변경 사항을 선택할 수 있습니다. 변경 내용을 브로드캐스트하려면 제품 설치 코드에서 "환경" 문자열로 설정된 lParamWM_SETTINGCHANGE 메시지를 보내도록 합니다. 모듈 설치 코드가 PSModulePath 업데이트된메시지를 보내야 합니다.

올바른 모듈 디렉터리 이름 사용

올바른 형식의 모듈은 모듈 디렉터리에 있는 하나 이상의 파일의 기본 이름과 동일한 이름을 가진 디렉터리에 저장된 모듈입니다. 모듈이 잘 구성되지 않은 경우 Windows PowerShell은 모듈로 인식하지 않습니다.

파일의 "기본 이름"은 파일 이름 확장명을 사용하지 않는 이름입니다. 올바른 형식의 모듈에서 모듈 파일이 포함된 디렉터리의 이름은 모듈에 있는 하나 이상의 파일의 기본 이름과 일치해야 합니다.

예를 들어 샘플 Fabrikam 모듈에서 모듈 파일이 포함된 디렉터리의 이름은 "Fabrikam"이며 하나 이상의 파일에는 "Fabrikam" 기본 이름이 있습니다. 이 경우 Fabrikam.psd1과 Fabrikam.dll 모두 "Fabrikam" 기본 이름을 갖습니다.

C:\Program Files
  Fabrikam Technologies
    Fabrikam Manager
      Modules
        Fabrikam
          Fabrikam.psd1 (module manifest)
          Fabrikam.dll (module assembly)

잘못된 설치의 효과

모듈이 제대로 구성되지 않았고 해당 위치가 PSModulePath 환경 변수의 값에 포함되지 않은 경우 다음과 같은 Windows PowerShell의 기본 검색 기능이 작동하지 않습니다.

  • 모듈 자동 로드 기능은 모듈을 자동으로 가져올 수 없습니다.

  • Get-Module cmdlet의 ListAvailable 매개 변수는 모듈을 찾을 수 없습니다.

  • Import-Module cmdlet에서 모듈을 찾을 수 없습니다. 모듈을 가져오려면 루트 모듈 파일 또는 모듈 매니페스트 파일의 전체 경로를 제공해야 합니다.

    모듈을 세션으로 가져오지 않으면 다음과 같은 추가 기능이 작동하지 않습니다. PSModulePath 환경 변수의 올바른 형식의 모듈에서 이러한 기능은 모듈을 세션으로 가져오지 않은 경우에도 작동합니다.

  • Get-Command cmdlet은 모듈에서 명령을 찾을 수 없습니다.

  • Update-HelpSave-Help cmdlet은 모듈에 대한 도움말을 업데이트하거나 저장할 수 없습니다.

  • Show-Command cmdlet은 모듈에서 명령을 찾아서 표시할 수 없습니다.

    모듈의 명령이 Windows PowerShell ISE(통합 스크립팅 환경)의 Show-Command 창에서 누락되었습니다.

모듈을 설치할 위치

이 섹션에서는 파일 시스템에서 Windows PowerShell 모듈을 설치하는 위치를 설명합니다. 위치는 모듈의 사용 방법에 따라 달라집니다.

특정 사용자에 대한 모듈 설치

사용자 고유의 모듈을 만들거나 Windows PowerShell 커뮤니티 웹 사이트와 같은 다른 당사자로부터 모듈을 가져오는 경우 사용자 계정에만 모듈을 사용할 수 있도록 하려면 사용자별 모듈 디렉터리에 모듈을 설치합니다.

$HOME\Documents\WindowsPowerShell\Modules\<Module Folder>\<Module Files>

사용자별 모듈 디렉터리가 기본적으로 PSModulePath 환경 변수의 값에 추가됩니다.

프로그램 파일의 모든 사용자에 대한 모듈 설치

컴퓨터의 모든 사용자 계정에서 모듈을 사용할 수 있도록 하려면 프로그램 파일 위치에 모듈을 설치합니다.

$Env:ProgramFiles\WindowsPowerShell\Modules\<Module Folder>\<Module Files>

비고

프로그램 파일 위치는 기본적으로 Windows PowerShell 4.0 이상에서 PSModulePath 환경 변수의 값에 추가됩니다. 이전 버전의 Windows PowerShell의 경우 프로그램 파일 위치(%ProgramFiles%\WindowsPowerShell\Modules)를 수동으로 만들고 위에서 설명한 대로 PSModulePath 환경 변수에 이 경로를 추가할 수 있습니다.

제품 디렉터리에 모듈 설치

모듈을 다른 당사자에게 배포하는 경우 위에서 설명한 기본 프로그램 파일 위치를 사용하거나 %ProgramFiles% 디렉터리의 고유한 회사별 또는 제품별 하위 디렉터리를 만듭니다.

예를 들어 가상의 회사인 Fabrikam Technologies는 Fabrikam Manager 제품용 Windows PowerShell 모듈을 배송합니다. 모듈 설치 관리자는 Fabrikam Manager 제품 하위 디렉터리에 모듈 하위 디렉터리를 만듭니다.

C:\Program Files
  Fabrikam Technologies
    Fabrikam Manager
      Modules
        Fabrikam
          Fabrikam.psd1 (module manifest)
          Fabrikam.dll (module assembly)

Windows PowerShell 모듈 검색 기능을 사용하여 Fabrikam 모듈을 찾을 수 있도록 Fabrikam 모듈 설치 관리자는 PSModulePath 환경 변수의 값에 모듈 위치를 추가합니다.

$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";C:\Program Files\Fabrikam Technologies\Fabrikam Manager\Modules\"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)

Common Files 디렉터리에 모듈 설치

모듈이 제품의 여러 구성 요소 또는 여러 버전의 제품에서 사용되는 경우 %ProgramFiles%\Common Files\Modules 하위 디렉터리의 모듈별 하위 디렉터리에 모듈을 설치합니다.

다음 예제에서는 Fabrikam 모듈이 %ProgramFiles%\Common Files\Modules 하위 디렉터리의 Fabrikam 하위 디렉터리에 설치됩니다. 각 모듈은 모듈 하위 디렉터리의 자체 하위 디렉터리에 있습니다.

C:\Program Files
  Common Files
    Modules
      Fabrikam
        Fabrikam.psd1 (module manifest)
        Fabrikam.dll (module assembly)

그런 다음 설치 관리자는 PSModulePath의 값을 보장합니다 환경 변수에는 Common Files\Modules 하위 디렉터리의 경로가 포함됩니다.

$m = $Env:ProgramFiles + '\Common Files\Modules'
$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$q = $p -split ';'
if ($q -notcontains $m) {
    $q += ";$m"
}
$p = $q -join ';'
[Environment]::SetEnvironmentVariable("PSModulePath", $p)

여러 버전의 모듈 설치

동일한 모듈의 여러 버전을 설치하려면 다음 절차를 사용합니다.

  1. 모듈의 각 버전에 대한 디렉터리를 만듭니다. 디렉터리 이름에 버전 번호를 포함합니다.
  2. 모듈의 각 버전에 대한 모듈 매니페스트를 만듭니다. 매니페스트의 ModuleVersion 키 값에 모듈 버전 번호를 입력합니다. 모듈의 버전별 디렉터리에 매니페스트 파일(.psd1)을 저장합니다.
  3. 다음 예제와 같이 PSModulePath 환경 변수 값에 모듈 루트 폴더 경로를 추가합니다.

특정 버전의 모듈을 가져오기 위해 최종 사용자는 Import-Module cmdlet의 MinimumVersion 또는 RequiredVersion 매개 변수를 사용할 수 있습니다.

예를 들어 Fabrikam 모듈을 버전 8.0 및 9.0에서 사용할 수 있는 경우 Fabrikam 모듈 디렉터리 구조는 다음과 유사할 수 있습니다.

C:\Program Files
Fabrikam Manager
 Fabrikam8
   Fabrikam
     Fabrikam.psd1 (module manifest: ModuleVersion = "8.0")
     Fabrikam.dll (module assembly)
 Fabrikam9
   Fabrikam
     Fabrikam.psd1 (module manifest: ModuleVersion = "9.0")
     Fabrikam.dll (module assembly)

설치 관리자는 두 모듈 경로를 PSModulePath 환경 변수 값에 추가합니다.

$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";C:\Program Files\Fabrikam\Fabrikam8;C:\Program Files\Fabrikam\Fabrikam9"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)

이러한 단계가 완료되면 Get-Module cmdlet의 ListAvailable 매개 변수는 Fabrikam 모듈을 모두 가져옵니다. 특정 모듈을 가져오려면 Import-Module cmdlet의 MinimumVersion 또는 RequiredVersion 매개 변수를 사용합니다.

두 모듈을 동일한 세션으로 가져오고 모듈에 이름이 같은 cmdlet이 포함된 경우 마지막으로 가져온 cmdlet이 세션에서 유효합니다.

명령 이름 충돌 처리

모듈에서 내보내는 명령의 이름이 사용자 세션의 명령과 동일한 경우 명령 이름 충돌이 발생할 수 있습니다.

세션에 이름이 같은 두 명령이 포함된 경우 Windows PowerShell은 우선 순위가 지정된 명령 유형을 실행합니다. 세션에 이름과 형식이 같은 두 명령이 포함된 경우 Windows PowerShell은 가장 최근에 세션에 추가된 명령을 실행합니다. 기본적으로 실행되지 않는 명령을 실행하려면 사용자는 명령 이름을 모듈 이름으로 한정할 수 있습니다.

예를 들어 세션에 Get-Date 함수와 Get-Date cmdlet이 포함된 경우 Windows PowerShell은 기본적으로 함수를 실행합니다. cmdlet을 실행하려면 다음과 같이 모듈 이름을 사용하여 명령 앞에 납니다.

Microsoft.PowerShell.Utility\Get-Date

이름 충돌을 방지하기 위해 모듈 작성자는 모듈 매니페스트의 DefaultCommandPrefix 키를 사용하여 모듈에서 내보낸 모든 명령에 명사 접두사를 지정할 수 있습니다.

사용자는 Import-Module cmdlet의 접두사 매개 변수를 사용하여 대체 접두사를 사용할 수 있습니다. 접두사 매개 변수의 값이 DefaultCommandPrefix 키 값보다 우선합니다.

비 Windows 시스템에서 경로 지원

비 Windows 플랫폼은 콜론(:) 문자를 경로 구분 기호로 사용하고 슬래시(/) 문자를 디렉터리 구분 기호로 사용합니다. [System.IO.Path] 클래스에는 모든 플랫폼에서 코드를 작동하는 데 사용할 수 있는 정적 멤버가 있습니다.

  • [System.IO.Path]::PathSeparator - 호스트 플랫폼의 PATH 환경 변수에서 경로를 구분하는 데 사용되는 문자를 반환합니다.
  • [System.IO.Path]::DirectorySeparatorChar - 호스트 플랫폼의 경로를 사용하여 디렉터리 이름을 구분하는 데 사용되는 문자를 반환합니다.

경로 문자열을 생성할 때 ;\ 문자 대신 이러한 정적 속성을 사용합니다.

또한 참조하십시오

about_Command_Precedence

Windows PowerShell 모듈 작성