다음을 통해 공유


about_Modules

간단한 설명

PowerShell 모듈을 설치, 가져오기 및 사용하는 방법을 설명합니다.

자세한 설명

PowerShell은 명령 셸 및 스크립팅 언어입니다. PowerShell의 명령은 스크립트, 함수 또는 cmdlet으로 구현됩니다. 언어에는 처리의 구조와 논리를 제공하는 키워드와 변수, 공급자, 별칭과 같은 기타 리소스가 포함됩니다.

모듈은 cmdlet, 공급자, 함수, 변수 및 기타 리소스를 포함할 수 있는 재사용 가능한 자체 포함 단위입니다. 기본적으로 PowerShell은 모듈의 명령을 처음 사용할 때 설치된 모듈을 자동으로 로드합니다. 변수 $PSModuleAutoloadingPreference를 사용하여 자동 모듈 로드 동작을 구성할 수 있습니다. 자세한 내용은 about_Preference_Variables 참조하세요.

PowerShell 세션 중에 모듈을 수동으로 로드하거나 언로드할 수도 있습니다. 모듈 Import-Module을 로드하거나 다시 로드하려면 . 모듈을 언로드하려면 cmdlet을 Remove-Module 사용합니다.

PowerShell에는 기본 모듈 집합이 포함되어 있습니다. 누구나 C# 또는 PowerShell 스크립팅 언어 자체를 사용하여 새 모듈을 만들 수 있습니다. 컴파일된 .NET 어셈블리로 C#으로 작성된 모듈을 네이티브 모듈이라고 합니다. PowerShell로 작성된 모듈을 스크립트 모듈이라고 합니다.

이 문서에서는 PowerShell 모듈을 사용하는 방법을 설명합니다. PowerShell 모듈을 만드는 방법에 대한 자세한 내용은 PowerShell 모듈 작성을 참조하세요.

참고 항목

PowerShell 3.0 이전에는 cmdlet 및 공급자가 PowerShell 스냅인에 패키지되었습니다. PowerShell 3.0 부터 Microsoft.PowerShell.Core 스냅인은 기본적으로 모든 세션에 추가됩니다. PowerShell에 남아 있는 유일한 스냅인입니다. 다른 모든 스냅인은 모듈로 변환되었습니다. 새 스냅인 만들기는 더 이상 지원되지 않습니다.

기본 모듈 위치

PowerShell은 모듈을 다음 기본 위치에 저장합니다.

  • Windows에서
    • 모든 사용자 범위 - $env:ProgramFiles\PowerShell\Modules
    • 현재 사용자 범위 - $HOME\Documents\PowerShell\Modules
    • PowerShell과 함께 제공되는 모듈 - $PSHOME\Modules
  • Linux 및 macOS에서
    • 모든 사용자 범위 - /usr/local/share/powershell/Modules
    • 현재 사용자 범위 - $HOME/.local/share/powershell/Modules
    • PowerShell과 함께 제공되는 모듈 - $PSHOME/Modules

기본적으로 Modules 현재 사용자의 폴더가 없습니다. 모듈 CurrentUser 을 사용 Install-Module 하거나 Install-PSResource범위에 설치한 경우 해당 cmdlet은 현재 사용자의 폴더를 만듭니 Modules 다. 폴더가 없으면 수동으로 만들 수 있습니다.

다음 명령을 사용하여 현재 사용자에 대한 폴더를 만듭니 Modules 다.

$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules

이러한 위치는 환경 변수에 $env:PSModulePath 자동으로 포함됩니다. 기본 모듈 위치에 대한 자세한 내용은 about_PSModulePath 참조하세요.

모듈 자동 로드

설치된 모듈에서 명령을 처음 실행할 때 PowerShell은 해당 모듈을 자동으로 가져오고 로드합니다. 모듈은 환경 변수에 지정된 $env:PSModulePath 위치에 저장해야 합니다.

모듈 자동 로드를 사용하면 설정 또는 프로필 구성 없이 모듈에서 명령을 사용할 수 있습니다. 다음 각 예제에서는 포함된 Get-CimInstanceCimCmdlets 모듈을 세션으로 가져옵니다.

  • 명령 실행

    Get-CimInstance Win32_OperatingSystem
    
  • 명령 가져오기

    Get-Command Get-CimInstance
    
  • 명령에 대한 도움말 보기

    Get-Help Get-CimInstance
    

와일드카드 문자()*와 함께 사용하는 Get-Command 경우 PowerShell은 모듈을 가져오지 않습니다. 세션에서 필요하지 않을 수 있는 모듈을 로드하지 않고 명령 검색에 와일드카드를 사용할 수 있습니다.

모듈 수동 가져오기

모듈을 환경 변수에 지정된 위치에 설치하지 않거나 모듈이 패키지된 $env:PSModulePath 모듈이 아닌 독립 실행형 .dll 또는 .psm1 파일로 제공되는 경우 모듈을 수동으로 가져와야 합니다.

또한 PowerShell 공급자를 사용하는 명령은 모듈을 자동으로 가져오지 않습니다. 예를 들어 cmdlet과 같이 Get-PSSessionConfiguration 드라이브가 필요한 WSMan: 명령을 사용하는 경우 cmdlet을 실행 Import-Module 하여 드라이브를 포함하는 WSMan: Microsoft.WSMan.Management 모듈을 가져와야 할 수 있습니다.

세션에서 모듈을 가져오는 방법을 변경할 수도 있습니다. 예를 들어 접두사 매개 변수는 Import-Module 모듈에서 가져온 cmdlet의 명사 부분에 고유한 접두사를 추가합니다. NoClobber 매개 변수를 사용하면 모듈이 세션의 기존 명령을 숨기거나 바꿀 명령을 추가할 수 없습니다. 자세한 내용은 이름 충돌 관리를 참조 하세요.

다음 예제에서는 BitsTransfer 모듈을 현재 세션으로 가져옵니다.

Import-Module BitsTransfer

모듈에 $env:PSModulePath없는 모듈을 가져오려면 모듈 폴더에 대한 정규화된 경로를 사용합니다. 예를 들어 디렉터리의 TestCmdlet 모듈을 세션에 C:\ps-test 추가하려면 다음을 입력합니다.

Import-Module C:\ps-test\TestCmdlets

모듈 폴더에 포함되지 않은 모듈 파일을 가져오려면 명령에서 모듈 파일에 대한 정규화된 경로를 사용합니다. 예를 들어 디렉터리의 TestCmdlets.dll 모듈을 세션에 C:\ps-test 추가하려면 다음을 입력합니다.

Import-Module C:\ps-test\TestCmdlets.dll

세션에 모듈을 추가하는 방법에 대한 자세한 내용은 Import-Module을 참조하세요.

모든 세션이 시작될 때 모듈 가져오기

Import-Module 명령은 모듈을 현재 PowerShell 세션으로 가져옵니다. 시작하는 모든 PowerShell 세션으로 모듈을 가져오려면 PowerShell 프로필에 Import-Module 명령을 추가합니다.

프로필에 대한 자세한 내용은 about_Profiles 참조하세요.

게시된 모듈 설치

게시된 모듈은 등록된 리포지토리(예: PowerShell 갤러리)에서 사용할 수 있는 모듈입니다. PowerShellGetMicrosoft.PowerShell.PSResourceGet 모듈은 등록된 리포지토리에 PowerShell 모듈을 찾고 설치하고 게시하기 위한 cmdlet을 제공합니다.

PowerShellGet 모듈은 PowerShell 5.0 이상 릴리스에 포함되어 있습니다. Microsoft.PowerShell.PSResourceGet 모듈은 PowerShell 7.4 이상 릴리스에 포함되어 있으며 PowerShell의 기본 패키지 관리자입니다. 이전 버전의 PowerShell에서 Microsoft.PowerShell.PSResourceGet을 PowerShellGet나란히 설치할 수 있습니다. or Install-PSResource cmdlet을 Install-Module 사용하여 PowerShell 갤러리 모듈을 설치합니다.

 Get-Command Install-Module, Install-PSResource
CommandType  Name                Version    Source
-----------  ----                -------    ------
Function     Install-Module      2.9.0      PowerShellGet
Cmdlet       Install-PSResource  1.0.0      Microsoft.PowerShell.PSResourceGet

자세한 내용은 PowerShellGet 개요를 참조 하세요.

모듈 수동 설치

다른 폴더에서 모듈 내용을 복사하여 모듈을 수동으로 설치할 수 있습니다. 해당 폴더는 로컬 컴퓨터의 다른 위치에 있거나 다른 컴퓨터에 설치될 수 있습니다. 모듈을 수동으로 설치하려면 전체 모듈 폴더를 에 포함된 새 위치에 복사합니다 $env:PSModulePath.

PowerShell에서 cmdlet을 Copy-Item 사용합니다. 예를 들어 다음 명령을 실행하여 다음에서 C:\PSTest폴더를 복사합니다MyModule.

$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse

모든 위치에 모듈을 설치할 수 있지만 기본 모듈 위치에 모듈을 설치하면 쉽게 관리할 수 있습니다.

설치된 모듈 찾기

이 cmdlet은 Get-Module 현재 PowerShell 세션에 로드된 PowerShell 모듈을 가져옵니다.

Get-Module

나열된 모듈에는 .에서뿐만 $env:PSModulePath아니라 모든 위치에서 가져온 모듈이 포함될 수 있습니다.

다음 명령을 사용하여 다음에 설치된 $env:PSModulePath모듈을 나열합니다.

Get-Module -ListAvailable

이 명령은 현재 세션으로 가져온 모듈뿐만 아니라 설치된 $env:PSModulePath모든 모듈을 가져옵니다. 이 명령은 다른 위치에 설치된 모듈을 나열하지 않습니다.

자세한 내용은 Get-Module을 참조 하세요.

모듈의 명령 나열

cmdlet을 Get-Command 사용하여 사용 가능한 모든 명령을 찾습니다. cmdlet의 매개 변수를 Get-Command 사용하여 모듈, 이름 및 명사별로 명령을 필터링할 수 있습니다.

모듈에서 모든 명령을 찾으려면 다음을 입력합니다.

Get-Command -Module <module-name>

예를 들어 BitsTransfer 모듈에서 명령을 찾으려면 다음을 입력합니다.

Get-Command -Module BitsTransfer

cmdlet에 Get-Command 대한 자세한 내용은 Get-Command를 참조하세요.

모듈 제거

모듈을 제거하면 모듈이 추가한 명령이 세션에서 삭제됩니다. 예를 들어 다음 명령은 현재 세션에서 BitsTransfer 모듈을 제거합니다.

Remove-Module BitsTransfer

모듈을 제거하면 모듈 가져오기 작업이 취소됩니다. 모듈을 제거해도 모듈은 제거되지 않습니다. 자세한 내용은 Remove-Module을 참조 하세요.

모듈 및 스냅인에서 세션에 명령을 추가할 수 있습니다. 모듈은 cmdlet, 공급자 및 함수를 비롯한 모든 유형의 명령과 변수, 별칭 및 PowerShell 드라이브와 같은 항목을 추가할 수 있습니다. 스냅인에서는 cmdlet과 공급자만 추가할 수 있습니다.

세션에서 모듈을 제거하기 전에 다음 명령을 사용하여 제거할 모듈을 결정합니다.

예를 들어 다음 명령을 사용하여 및 Get-Help cmdlet의 원본을 Get-Date 찾습니다.

Get-Command Get-Date, Get-Help -All |
    Select-Object -Property Name, CommandType, Module ,PSSnapIn

다음 출력은 cmdlet이 Microsoft.PowerShell.Core 스냅인에 있음을 Get-Help 보여줍니다. 이 스냅인은 세션에서 제거할 수 없습니다.

Name     CommandType Module                       PSSnapIn
----     ----------- ------                       --------
Get-Date    Function
Get-Date      Cmdlet Microsoft.PowerShell.Utility
Get-Help      Cmdlet                              Microsoft.PowerShell.Core

에 대한 Get-Date두 가지 소스가 있습니다. 하나는 함수이고 다른 하나는 Microsoft.PowerShell.Utility 모듈의 cmdlet입니다. 를 사용하여 Remove-Module모듈을 제거할 수 있습니다. 함수를 제거하려면 드라이브에서 해당 함수를 삭제할 Function: 수 있습니다.

Remove-Item Function:Get-Date

드라이브에 대한 Function: 자세한 내용은 about_Function_Provider 참조하세요.

이름 충돌 관리

세션에서 둘 이상의 명령 이름이 같은 경우 이름 충돌이 발생합니다. 모듈을 가져오면 모듈의 명령 이름이 세션의 명령 또는 항목과 같을 때 이름이 충돌합니다.

Import-Module 는 현재 세션에서 명령을 숨기고 바꾸는 명령을 추가할 수 있습니다. 이름 충돌이 발생하면 명령이 숨겨지거나 바뀝니다. 가져온 모듈에 세션의 기존 명령과 이름이 같은 명령이 포함된 경우 명령 대체가 발생합니다. 새로 가져온 명령이 기존 명령보다 우선합니다.

예를 들어 세션에 동일한 이름의 함수와 cmdlet이 포함된 경우 PowerShell은 기본적으로 함수를 실행합니다. 세션에 동일한 이름을 가진 동일한 형식의 명령(예: 이름이 같은 두 cmdlet)이 포함된 경우 기본적으로 가장 최근에 추가된 명령을 실행합니다.

선행 규칙에 대한 설명과 숨겨진 명령 실행에 대한 지침을 비롯한 자세한 내용은 about_Command_Precedence 참조하세요.

명령 이름을 한정하여 숨김 또는 바꾸기 명령을 실행할 수 있습니다. 명령 이름을 한정하려면 원하는 명령 버전이 포함된 모듈의 이름을 추가합니다. 예시:

Microsoft.PowerShell.Utility\Get-Date

모듈 이름 접두사를 사용하여 실행 Get-Date 하면 Microsoft.PowerShell.Utility 모듈에서 버전을 실행합니다.

이름 충돌을 감지하려면 cmdlet의 All 매개 변수를 Get-Command 사용합니다. 기본적으로 Get-Command 명령 이름을 입력할 때 실행되는 명령만 가져옵니다. All 매개 변수는 세션의 특정 이름을 가진 모든 명령을 가져옵니다.

이름 충돌을 방지하려면 cmdlet의 NoClobber 또는 접두사 매개 변수를 Import-Module 사용합니다. 접두사 매개 변수는 가져온 명령의 이름에 접두사를 추가하여 세션에서 고유하도록 합니다. NoClobber 매개 변수는 세션의 기존 명령을 숨기거나 바꾸는 명령을 가져오지 않습니다.

또한 별칭, Cmdlet, 함수변수 매개 변수 Import-Module 를 사용하여 가져오려는 명령만 선택할 수 있으며 세션에서 이름 충돌을 일으키는 명령을 제외할 수 있습니다.

모듈 작성자는 모듈 매니페스트의 DefaultCommandPrefix 속성을 사용하여 모든 명령 이름에 기본 접두사를 추가하여 이름 충돌을 방지할 수 있습니다. 접두사 매개 변수의 값이 DefaultCommandPrefix보다 우선합니다.

참고 항목