PowerShell 모듈이란 무엇인가요?
PowerShell 모듈은 일부 PowerShell 기능을 포함하는 재사용 가능한 패키지입니다. PowerShell의 모든 것(함수, 변수, DSC 리소스 등)은 모듈로 패키징할 수 있습니다. 일반적으로 모듈은 특정 경로에 저장된 특정 유형의 파일을 담은 폴더입니다. PowerShell 모듈에는 몇 가지 종류가 있습니다.
PowerShell 스크립트란 무엇인가요?
PowerShell 스크립트는 재사용과 공유를 가능하게 하기 위해 .ps1 파일에 저장된 일련의 명령어입니다. PowerShell 워크플로우는 또한 작업 집합을 개요로 정리하고 그 작업에 대한 순서를 제공하는 PowerShell 스크립트이기도 합니다. 자세한 내용은 'PowerShell 워크플로우 시작하기'를 방문해 주세요.
PowerShell 스크립트는 PowerShell 모듈과 어떻게 다른가요?
일반적으로 모듈이 공유에 더 좋지만, 커뮤니티에 워크플로우와 스크립트를 더 쉽게 기여할 수 있도록 스크립트 공유를 가능하게 하고 있습니다. 자세한 내용은 다음 블로그를 참고하세요:
PowerShell 갤러리에 어떻게 게시할 수 있나요?
패키지를 갤러리에 게시하기 전에 반드시 PowerShell 갤러리에 계정을 등록해야 합니다. 이는 패키지를 게시하려면 등록 시 제공되는 NuGetApiKey가 필요하기 때문입니다. 등록하려면 개인, 직장 또는 학교 계정을 사용해 PowerShell 갤러리에 로그인하세요. 처음 로그인할 때는 일회성 등록 절차가 필요합니다. 그 후 프로필 페이지에서 NuGetApiKey를 확인할 수 있습니다.
갤러리에 등록한 후에는 Publish-Module 또는 Publish-Script cmdlet을 사용해 패키지를 갤러리에 게시하세요. 이 cmdlet을 실행하는 방법에 대한 자세한 내용은 Publish 탭을 방문하거나 Publish-Module 및 Publish-Script 문서를 읽어보세요.
패키지를 설치하거나 저장하기 위해 갤러리에 등록하거나 로그인할 필요가 없습니다.
"처리 실패 요청"을 받았습니다. PowerShell 갤러리에 패키지를 게시하려고 했을 때, 이것은 어떤 의미일까요?
전체 오류 메시지는 다음과 같습니다: "요청 처리 실패." '지정된 API 키는 유효하지 않거나 지정된 패키지에 접근할 권한이 없습니다.' 원격 서버는 다음과 같은 오류를 반환했습니다: (403) 금지."
이 오류는 다음과 같은 이유로 발생할 수 있습니다.
- 지정된 API 키는 유효하지 않습니다. 계정에서 유효한 API 키를 지정했는지 확인하세요. API 키를 받으려면 프로필 페이지를 확인하세요.
- 지정된 패키지 이름은 본인의 소유가 아닙니다. API 키가 올바른지 확인하셨다면, 이미 사용하려는 것과 같은 이름을 가진 패키지가 존재할 수도 있습니다. 소유자가 패키지를 비등록했을 수 있으니, 검색 결과에 나타나지 않을 수 있습니다. 같은 이름을 가진 패키지가 이미 존재하는지 확인하려면 브라우저를 열고 패키지의 세부 정보 페이지로 이동하세요:
https://www.powershellgallery.com/packages/<packageName>. 예를 들어, 직접 탐색https://www.powershellgallery.com/packages/pester하면 비공개 여부와 상관없이 Pester 모듈의 세부 정보 페이지로 이동합니다. 만약 이름이 충돌하는 패키지가 이미 존재하고 비등록되어 있다면, 다음과 같은 조치가 가능합니다:- 패키지에 다른 이름을 선택하세요.
- 기존 패키지 소유자에게 연락하세요.
왜 개인 계정으로는 로그인할 수 없는데 어제는 로그인할 수 있었을까요?
갤러리 계정은 기본 이메일 별칭 변경을 지원하지 않는다는 점을 유의해 주세요. 자세한 내용은 Microsoft 이메일 별칭을 참조하세요.
패키지 탭에서 모든 카테고리 체크박스를 선택했을 때 왜 모든 갤러리 패키지가 보이지 않나요?
카테고리 체크박스를 선택하면 "이 카테고리의 모든 패키지를 보고 싶습니다."라고 표시하는 것입니다. 선택된 카테고리의 패키지만 표시됩니다. 마찬가지로 모든 카테고리 체크박스를 선택하면 "모든 카테고리의 패키지를 보고 싶다"고 말하는 셈입니다. 하지만 갤러리에 있는 일부 패키지는 나열된 카테고리에 속하지 않아 결과에 나타나지 않습니다. 갤러리의 모든 패키지를 보려면, 모든 카테고리를 체크 해제하거나 패키지 탭을 다시 선택하세요.
모듈을 PowerShell 갤러리에 게시하기 위한 요구사항은 무엇인가요?
스크립트 모듈, 바이너리 모듈, 매니페스트 모듈 등 모든 종류의 PowerShell 모듈을 갤러리에 게시할 수 있습니다. 모듈을 출판하려면 PowerShellGet이 몇 가지 정보를 알아야 합니다 - 버전, 설명, 저자, 그리고 라이선스 방식. 이 정보는 모듈 매니페스트 (.psd1) 파일에서 퍼블리싱 과정의 일부로 읽히거나, Publish-Module 커미틀렛의 LicenseUri 파라미터 값에서 읽힙니다. 갤러리에 게시되는 모든 모듈은 모듈 매니페스트를 반드시 포함해야 합니다. 다음 정보를 명단에 포함하는 모듈은 갤러리에 게시할 수 있습니다:
- 버전
- 설명
- 저자
- 모듈의 라이선스 조건에 대한 URI를 명세서의 PrivateData 섹션의 일부나 Publish-Module cmdlet의 LicenseUri 매개변수에 포함시키는 것입니다.
올바른 형식의 모듈 매니페스트를 어떻게 만들 수 있나요?
모듈 매니페스트를 만드는 가장 쉬운 방법은 New-ModuleManifest cmdlet을 실행하는 것입니다. PowerShell 5.0 이상에서는 ProjectUri, LicenseUri, Tags와 같은 유용한 메타데이터를 위한 빈칸 필드가 포함된 올바른 형식의 모듈 매니페스트를 생성New-ModuleManifest. 빈칸을 채우거나, 생성된 명세서를 올바른 서식의 예로 사용하세요.
필요한 메타데이터 필드가 모두 제대로 채워졌는지 확인하려면 Test-ModuleManifest cmdlet을 사용하세요.
모듈 매니페스트 파일 필드를 업데이트하려면 Update-ModuleManifest cmdlet을 사용하세요.
갤러리에 대본을 게시하기 위한 요건은 무엇인가요?
어떤 종류의 PowerShell 스크립트(스크립트나 워크플로우)도 갤러리에 게시할 수 있습니다. 스크립트를 공개하려면 PowerShellGet이 몇 가지 정보를 알아야 합니다 - 버전, 설명, 작성자, 그리고 라이선스 방식. 이 정보는 퍼블리싱 과정의 일부로 스크립트 파일의 PSScriptInfo 섹션이나 Publish-Script cmdlet의 LicenseUri 매개변수 값에서 읽힙니다. 갤러리에 게시되는 모든 스크립트는 메타데이터 정보를 포함해야 합니다. PSScriptInfo 섹션에 다음 정보를 포함하는 스크립트는 갤러리에 게시할 수 있습니다:
- 버전
- 설명
- 저자
- 스크립트의 라이선스 조건에 대한 URI가 스크립트의 PSScriptInfo 섹션의 일부이거나 Publish-Script 명령어의 LicenseUri 매개변수에 포함될 수 있습니다.
어떻게 검색하나요?
텍스트 박스에 원하는 내용을 입력하세요. 예를 들어, Azure SQL과 관련된 모듈을 찾고 싶으면 "azure sql"을 입력하면 됩니다. 저희 검색 엔진은 제목, 설명, 메타데이터 전반에 걸쳐 모든 게시된 패키지에서 해당 키워드를 찾습니다. 그 후 가중 품질 점수를 바탕으로 가장 근접한 일치 점수를 표시합니다. 다음 필드에 대해서는 field:"value" 문법을 사용하여 특정 필드별로 검색할 수도 있습니다:
- 태그들
- 함수
- Cmdlets (커맨드렛)
- Dsc리소스
- PowerShellVersion
예를 들어, PowerShellVersion:"2.0"을 검색하면 모듈/스크립트 매니페스트에 따라 PowerShellVersion 2.0과 호환되는 결과만 표시됩니다.
올바른 형식의 스크립트 파일을 어떻게 만들 수 있나요?
올바르게 형식화된 스크립트 파일을 만드는 가장 쉬운 방법은 New-ScriptFileInfo 명령어를 실행하는 것입니다. PowerShell 5.0에서는 ProjectUri, LicenseUri, Tags와 같은 유용한 메타데이터를 위한 빈칸 필드가 포함된 올바른 형식의 스크립트 파일을 생성New-ScriptFileInfo. 빈칸을 채우거나, 생성된 스크립트 파일을 올바른 서식의 예로 사용하세요.
필요한 메타데이터 필드가 모두 제대로 채워졌는지 확인하려면 Test-ScriptFileInfo 명령어를 사용하세요.
스크립트 메타데이터 필드를 업데이트하려면 Update-ScriptFileInfo cmdlet을 사용하세요.
다른 종류의 PowerShell 모듈에는 어떤 것들이 있나요?
PowerShell 모듈이라는 용어는 실제 기능을 구현하는 파일들도 가리킵니다. 스크립트 모듈 파일(.psm1)에는 PowerShell 코드가 포함되어 있습니다. 바이너리 모듈 파일(.dll)에는 컴파일된 코드가 포함되어 있습니다.
한 가지 생각 방법이 있습니다: 모듈을 캡슐화하는 폴더가 바로 모듈 폴더입니다. 모듈 폴더에는 폴더 내용을 설명하는 모듈 매니페스트(.psd1)가 포함될 수 있습니다. 실제로 작업을 수행하는 파일은 스크립트 모듈 파일(.psm1)과 바이너리 모듈 파일(.dll)입니다. DSC 자원은 특정 하위 폴더에 위치하며, 스크립트 모듈 파일 또는 바이너리 모듈 파일로 구현됩니다.
갤러리 내 모든 모듈은 모듈 매니페스트를 포함하며, 대부분의 모듈은 스크립트 모듈 파일 또는 바이너리 모듈 파일을 포함하고 있습니다. 모듈이라는 용어는 이러한 서로 다른 의미 때문에 혼동을 줄 수 있습니다. 별도로 명시되지 않는 한, 이 페이지에서 모듈이라는 단어의 모든 사용은 이 파일들이 포함된 모듈 폴더를 의미합니다.
패키지 관리는 PowerShellGet과 어떻게 관련되나요? (고위 답변)
패키지 관리는 모든 패키지 관리자와 작업할 때 흔히 사용하는 인터페이스입니다. 결국 PowerShell 모듈, MSI, Ruby gem, NuGet 패키지, Perl 모듈 등 어떤 모듈을 다루든 PackageManagement의 명령어(Find-Package와 Install-Package)를 사용해 찾아 설치할 수 있을 것입니다. PackageManagement는 각 패키지 관리자마다 패키지 제공자를 두어 PackageManagement에 연결함으로써 이를 구현합니다. 제공자들이 실제 업무를 모두 수행합니다; 저장소에서 콘텐츠를 가져오고, 로컬에 설치합니다. 종종 패키지 제공자는 특정 패키지 유형에 대한 기존 패키지 관리자 도구를 단순히 감싸 사용합니다.
PowerShellGet은 PowerShell 패키지의 패키지 관리자입니다. PowerShellGet 기능을 PackageManagement를 통해 노출하는 PSModule 패키지 제공자가 있습니다. 이 때문에 Install-Module을 실행하거나 Install-Package -Provider PSModule PowerShell 갤러리에서 모듈을 설치할 수 있습니다.
Update-Module 및 Publish-Module 등 일부 PowerShellGet 기능은 PackageManagement 명령어를 통해 접근할 수 없습니다.
요약하자면, PowerShellGet은 오로지 PowerShell 콘텐츠에 대한 프리미엄 패키지 관리 경험에 집중하고 있습니다. 패키지 관리는 하나의 일반적인 도구 세트를 통해 모든 패키지 관리 경험을 노출하는 데 중점을 둡니다. 이 답변이 만족스럽지 않다면, 이 문서 하단의 ' 패키지 관리가 PowerShellGet과 실제로 어떻게 연관되는가?' 섹션에 긴 답변이 있습니다.
자세한 정보는 패키지 관리 프로젝트 페이지를 방문해 주세요.
NuGet은 PowerShellGet과 어떻게 연관되나요?
PowerShell 갤러리는 NuGet Gallery의 수정된 버전입니다. PowerShellGet은 PowerShell 갤러리 같은 NuGet 기반 저장소와 함께 NuGet 제공자를 사용합니다.
PowerShellTGet은 유효한 NuGet 저장소나 파일 공유에 대해 사용할 수 있습니다. Register-PSRepository cmdlet을 실행하여 저장소를 추가하기만 하면 됩니다.
그럼 갤러리와 작업할 수 있는 NuGet.exe 있나요?
Yes.
패키지 관리는 실제로 PowerShellGet과 어떻게 연관되나요? (기술적 세부사항)
PowerShellGet은 패키지 관리 인프라를 적극적으로 활용합니다.
PowerShell cmdlet 계층에서 Install-Module 은 사실 를 얇게 감싸 Install-Package -Provider PSModule는 래퍼입니다.
패키지관리 패키지 제공자 계층에서는 PSModule 패키지 제공자가 실제로 다른 패키지관리 패키지 제공자에 호출합니다. 예를 들어, NuGet 기반 갤러리(예: PowerShell 갤러리)를 다룰 때, PSModule 패키지 제공자는 저장소와 함께 NuGet 패키지 제공자를 사용합니다.
그림 1: PowerShellGet 아키텍처
PowerShellGet을 실행하려면 무엇이 필요한가요?
일반적으로 PowerShellGet 모듈의 최신 버전을 선택하는 것을 권장합니다(참고로 .NET 4.5가 필요합니다).
PowerShellGet 모듈은 PowerShell 3.0 이상이 필요합니다.
따라서 PowerShellGet 은 다음 운영 체제 중 하나를 필요로 합니다:
- 윈도우 10
- Windows 8.1 프로
- Windows 8.1 엔터프라이즈
- 윈도우 7 SP1
- 윈도우 서버 2016
- 윈도우 서버 2012 R2
- Windows Server 2008 R2 SP1
PowerShellGet은 .NET Framework 4.5 이상도 필요합니다. 자세한 내용은 개발자용 .NET Framework 설치를 참조하세요.
앞으로 공개될 패키지에 대해 이름을 예약할 수 있나요?
패키지 이름을 스쿼트하는 것은 불가능합니다. 기존 패키지가 더 적합한 이름을 사용했다고 느껴진다면, 패키지 소유자에게 연락해 보세요. 몇 주 내에 답변이 없으면 지원팀에 연락하면 PowerShell 갤러리 팀이 검토해 줄 것입니다.
소포 소유권을 어떻게 주장하나요?
자세한 내용은 PowerShellGallery.com 의 Managing Package Owners 를 참고하세요.
패키지 라이선스를 위반하는 패키지 소유자를 어떻게 대처해야 하나요?
우리는 PowerShell 커뮤니티가 패키지 소유자와 다른 패키지 소유자 간에 발생할 수 있는 분쟁을 해결하기 위해 협력할 것을 권장합니다. 저희는 관리자들이 개입하기 전에 반드시 따라주시기 PowerShellGallery.com 분 쟁 해결 절차를 마련했습니다.