PowerShell 모듈을 전문가처럼 가져오는 방법

PowerShell은 현저하게 견고한 스크립팅 언어입니다. 그러나 그 잠재력을 발휘하려면 올바른 모듈을 가져오는 방법을 알아야 합니다.

이 자습서에서는 전문가처럼 PowerShell 모듈을 가져오는 데 필요한 모든 것을 배울 수 있습니다. cmdlet, 매개변수 및 모듈에 대한 깊은 이해를 바탕으로, 이전보다 더 빠르고 효율적이며 효과적인 스크립트를 작성할 수 있습니다.

PowerShell 기술을 강화하고 스크립팅 능력을 새로운 차원으로 끌어올리려면 계속 읽어보세요!

전제 조건

이 자습서는 실습 중심으로 진행됩니다. 따라가려면 PowerShell이 설치된 시스템이 있어야 합니다. 이 자습서는 Windows 10과 PowerShell 5.1을 예시로 사용하지만 대부분의 Windows 버전과 PowerShell에서 동일한 명령이 작동해야 합니다.

단일 모듈 가져오기

PowerShell 모듈에는 PowerShell 스크립트에서 사용할 수 있는 미리 작성된 코드가 포함되어 있어 시간과 노력을 절약할 수 있습니다. PowerShell 모듈을 가져오면 처음부터 시작하는 대신 미리 작성된 코드를 활용할 수 있습니다.

Import-Module cmdlet은 PowerShell에서 모듈을 가져오는 주요 방법입니다. PowerShell 모듈을 가져오는 것은 Import-Module cmdlet을 사용하는 가장 기본적인 사용 중 하나이며, 이 튜토리얼에서 처음으로 배우게 될 내용 중 하나입니다.

PowerShell을 관리자 권한으로 열고 아래의 Import-Module 명령을 실행하여 PSDiagnostics 모듈을 찾아 메모리에 로드합니다. 성공하면 모듈이 가져와지지만 명령은 출력을 생성하지 않습니다.

Import-Module PSDiagnostics

Install-Module cmdlet을 통해 온라인 저장소에서 모듈을 가져오는 것은 가능한 경우 강력히 권장됩니다. 이 cmdlet은 종속성 및 버전 관리를 자동으로 처리합니다.

한 번 모듈을 가져오면 모듈의 cmdlet 또는 기능 중 하나를 사용하여 문제를 진단하고 해결할 수 있습니다. Enable-PSTrace cmdlet은 PSDiagnostics 모듈에서 제공하는 cmdlet 중 하나에 불과하며 PowerShell에서 진단 추적을 활성화합니다.

이제 다음 Enable-PSTrace 명령을 실행하여 진단 추적을 수행하고 결과를 지정된 -TraceFilePath (C:\\MyTrace.log)에 저장하세요. 이 명령은 결과를 콘솔에 제공하지 않으며 대신 파일로 기록됩니다.

Enable-PSTrace -TraceLevel 1 -TraceFilePath C:\MyTrace.log

일부 모듈은 사용하기 전에 추가 구성이나 설정이 필요할 수 있습니다. 모듈과 함께 제공된 문서를 읽어 모든 선행 조건이나 요구 사항을 이해하세요.

한 번에 여러 모듈 가져오기

단일 모듈을 가져오는 것은 괜찮지만 여러 모듈을 한 번에 가져와야 하는 경우도 Import-Module cmdlet의 능력 안에 있습니다.

여러 모듈을 가져오는 것은 PowerShell에서 시간과 노력을 절약하는 훌륭한 방법입니다. 그러나 정확히 어떻게 해야 할까요? 쉼표로 구분된 모듈 이름을 지정할 것입니다.

아래 명령을 실행하여 여러 모듈을 검색하세요 (Dism, PowerShellGet, PSReadline) 및 메모리로 로드합니다. 단일 모듈을 가져오는 것처럼이 명령은 출력을 제공하지 않습니다.

Import-Module Dism, PowerShellGet, PSReadline

모듈 가져오기 세부 정보 표시

이전에 언급했듯이 성공적인 모듈 가져오기는 출력을 제공하지 않습니다. 하지만 인정하세요. 모듈이 실제로 가져와졌는지 여부에 대해 회의를 갖게될 것입니다.

-Verbose 매개 변수는 Import-Module cmdlet을 포함하여 많은 PowerShell cmdlet 및 함수와 함께 사용할 수있는 유용한 옵션입니다. 이 매개 변수는 PowerShell에 명령이 실행되는 대로 자세한 정보를 표시하도록합니다. 결과적으로 문제 해결 및 디버깅에 사용할 수있는 중요한 피드백을 얻을 수 있습니다.

다음 명령을 실행하여 SmbShare 모듈을 가져오고 -Verbose 매개변수를 추가하여 모듈 가져오기 세부 정보를 출력합니다.

Import-Module SmbShare -Verbose

아래에서 볼 수 있듯이 -Verbose 매개변수는 모듈 파일이 로드되고 모듈에서 가져오는 다양한 기능에 대한 세부 정보를 제공합니다. 이 정보는 모듈의 내부 작동을 이해하는 데 도움이 될 수 있습니다.

이 경우 SmbShare 모듈은 Windows 기계에서 SMB 공유를 관리하기 위한 cmdlet을 제공합니다. 이 cmdlet에는 New-SmbShare (새 공유 생성) 및 Remove-SmbShare (기존 공유 제거)이 포함됩니다.

Displaying module import details

동일한 세션에 모듈 다시 가져오기

모듈이 문제가 발생하거나 모듈의 최신 버전을 사용하려는 경우 Import-Module 명령에 -Force 매개변수를 추가하여 PowerShell을 다시 가져오는 것이 유용합니다.

-Force 매개변수를 사용하면 PowerShell 세션을 닫거나 다시 열지 않고도 모듈에서 제공하는 cmdlet 및 함수를 계속 사용할 수 있습니다.

모듈을 다시 가져오는 일반적인 사용 사례 중 하나는 모듈을 개발하고 변경 사항을 적용할 때입니다. 변경 사항을 최종적으로 적용하기 전에 현재 세션에 모듈을 다시 가져와서 해당 변경 사항을 테스트할 수 있습니다.

다음 명령을 실행하여 -Force PowerShell을 사용하여 SmbShare 모듈을 제거하고 원래 위치에서 다시 가져옵니다.

-Prefix 매개변수를 사용하면 모듈에서 가져온 cmdlet 및 함수에 대한 접두어를 지정할 수 있습니다. 이 경우 가져온 모든 cmdlet 및 함수는 New로 시작됩니다. 이 매개변수는 세션에서 기존 cmdlet이나 함수와의 충돌을 피하는 데 유용할 수 있습니다.

예를 들어 원래 모듈의 Get-SmbShare cmdlet은 다시 가져온 모듈에서 Get-NewSmbShare로 변경됩니다.

Import-Module SmbShare -Force -Prefix New

이제 Get-Command을 실행하여 선택한 SmbShare 모듈에서 제공하는 모든 cmdlet 및 함수의 목록을 검색하려면 (Select-Object) 아래의 명령을 실행하세요.

Get-Command -Module SmbShare | Select-Object Name

아래에서 볼 수 있듯이 SmbShare 모듈의 cmdlet 이름에는 이제 접두사 New가 추가되었습니다. 이 출력은 모듈이 성공적으로 다시 가져와졌음을 확인합니다.

Verifying the SmbShare module has been reimported

NuGet 패키지를 사용하여 PowerShell 모듈 수동으로 가져오기

지금까지 PowerShell 갤러리에서 모듈을 성공적으로 가져왔습니다. 그러나 찾고 있는 모듈이 없는 경우 어떻게 해야 할까요?

NuGet 패키지에서 PowerShell 모듈을 수동으로 설치하고 가져올 수 있습니다. PowerShell 컨텍스트에서 NuGet 패키지는 PowerShell 모듈과 해당 모듈이 작동하는 데 필요한 종속 모듈 또는 라이브러리가 포함된 파일 모음입니다.

NuGet 패키지에서 모듈을 가져오려면 다음 단계를 따라 수동으로 패키지를 다운로드, 추출 및 설치해야 합니다:

1. Az.Automation 모듈의 Azure PowerShell 갤러리 페이지로 이동합니다.

2. 그런 다음 수동 다운로드 탭을 클릭한 다음 원시 nupkg 파일 다운로드를 클릭하여 패키지를 다운로드합니다. 이 자습서에서는 Azure PowerShell 갤러리의 Az.Automation 1.9.1 모듈을 예로 들었습니다. 그러나 동일한 단계가 다른 NuGet 패키지에도 적용됩니다.

Downloading the raw NuGet package (nupkg) file

3. 다운로드한 후 아래의 Unblock-File 명령을 실행하십시오. 이 명령은 출력을 제공하지 않지만 다운로드한 .nupkg 파일을 차단 해제합니다. 파일 경로는 패키지를 다운로드한 위치로 변경해야 합니다.

블록 해제가 필요합니다. 왜냐하면 PowerShell은 인터넷에서 다운로드한 파일의 실행을 방지하기 위한 보안 조치로 파일 실행을 허용하지 않을 수 있습니다

Unblock-File -Path C:\PSModules\az.automation.1.9.1.nupkg

4. 이제 다운로드한 .nupkg 파일을 로컬 머신의 폴더로 압축 해제하십시오. 패키지를 압축 해제하려면 7-zip 또는 WinRAR과 같은 압축 해제 도구가 필요할 수 있습니다. NuGet 패키지는 모듈을 구성하는 파일 모음을 포함한 ZIP 아카이브입니다.

5. 추출된 폴더에서 다음 내용을 삭제하십시오.

NuGet 패키지의 추출된 내용에는 수동으로 모듈을 설치하는 데 필요하지 않은 일부 메타데이터 및 파일이 포함되어 있습니다.

Name Type
_rels Folder
Package Folder
[Content_Types].xml XML File
Az.Automation.nuspec XML Manifest File
Deleting unnecessary contents from the extracted NuGet package folder

6. 추출된 폴더의 이름을 az.automation과 같이 더 구체적인 이름으로 변경하여 오류를 방지하십시오. 모든 글자를 소문자로 유지하고 이름에 특수 문자를 사용하지 않도록 주의하십시오.

7. 다음으로 아래 명령어를 실행하여 현재 셸 모듈의 경로를 찾으십시오. 이 명령은 시스템에서 모듈 이름이 스크립트 또는 명령에서 지정될 때 PowerShell이 모듈을 자동으로 로드하기 위해 이 경로를 검색합니다.

$env:PSModulePath

이 경로를 기록해 두십시오. 다음 단계에서 필요합니다.

Finding out where your modules’ paths are located

8. 새로 지정한 폴더(az.automation)를 일곱 번째 단계에서 메모한 디렉터리 중 하나에 복사합니다. 이렇게 하면 모듈의 범위(특정 사용자 또는 모든 사용자)가 정의됩니다.

Path Function
C:\Users\admin\Documents\WindowsPowerShell\Modules Makes the module available for the specific user account (admin). This tutorial uses this location as an example.
C:\Program Files\WindowsPowerShell\Modules Makes the module available for all user accounts on your local machine.

9. 이제 아래 명령을 실행하여 모듈(az.automation)을 PowerShell 세션에 설치하고 가져옵니다. az.automation을 실제 모듈 이름으로 교체하십시오.

Import-Module -Name az.automation -Verbose
Installing and importing a module from a NuGet package

10. 마지막으로 다음 명령을 실행하여 모듈(az.automation)이 성공적으로 가져와졌는지 확인합니다.Get-Module

Get-Module -Name az.automation
Verifying the module has been imported successfully

자동 검색에 의존하고 싶지 않은 경우 정확한 파일 위치(C:\az.automation)를 지정하여 모듈을 가져올 때까지입니다.

Import-Module -Name C:\az.automation -Verbose
Specifying the exact file location when importing a module

결론

결합된 기능이나 그룹화된 코드로 PowerShell 모듈은 게임 체인저입니다. 이 튜토리얼에서는 NuGet 패키지에서 수동으로 모듈을 가져오는 것을 포함하여 세션에 PowerShell 모듈을 가져오는 다양한 방법을 배웠습니다. 가져오기 프로세스를 제어하는 다양한 매개변수에도 언급했습니다.

내마스터링이 이러한 기술들에 의해, 당신은 쉽게 모듈을 가져와서 자동화 스크립트를 강화할 수 있습니다. 그러나 학습은 거기서 멈추지 않아도 됩니다. PowerShell 모듈 관리 기술을 더 높은 수준으로 끌어올려 모듈 멤버 내보내기를 배워보는 것은 어떨까요?

Source:
https://adamtheautomator.com/import-powershell-modules/