질문과 대답Frequently Asked Questions

PowerShell 모듈이란?What is a PowerShell module?

PowerShell 모듈은 일부 PowerShell 기능을 포함하는 재사용 가능한 패키지입니다.A PowerShell module is a reusable package containing some PowerShell functionality. PowerShell의 모든 항목(함수, 변수, DSC 리소스 등)을 모듈에 패키징할 수 있습니다.Everything in PowerShell (functions, variables, DSC resources, etc.) can be packaged in modules. 일반적으로 모듈은 특정 경로에 저장된 특정 파일 형식을 포함하는 폴더입니다.Typically, modules are folders containing specific types of files stored on a specific path. 몇 가지 유형의 PowerShell 모듈이 있습니다.There are a few different types of PowerShell modules out there.

PowerShell 스크립트란?What is a PowerShell script?

PowerShell 스크립트는 다시 사용 및 공유할 수 있도록 .ps1 파일에 저장된 일련의 명령입니다.A PowerShell script is a series of commands that are stored in a .ps1 file to enable reuse and sharing. PowerShell 워크플로도 일련의 작업을 간략하게 설명하고 해당 작업 순서를 제공하는 PowerShell 스크립트입니다.PowerShell workflows are also PowerShell scripts, which outline a set of tasks and provide sequencing for those tasks. 자세한 내용은 PowerShell 워크플로 시작을 참조하세요.For more information, please visit Getting Started with PowerShell Workflow.

PowerShell 스크립트와 PowerShell 모듈의 차이점은 무엇인가요?How are PowerShell Scripts different from PowerShell Modules?

일반적으로 모듈이 공유에 더 효과적이지만 워크플로와 스크립트를 커뮤니티에 기여하기 쉽도록 스크립트 공유를 설정합니다.Modules are generally better for sharing, but we are enabling script sharing to make it easier for you to contribute workflows and scripts to the community. 자세한 내용은 다음 블로그를 참조하세요.For more information, see the following blogs:

갤러리에 패키지를 게시하려면 먼저 PowerShell 갤러리에 계정을 등록해야 합니다.You must register an account in the PowerShell Gallery before you can publish packages to the Gallery. 패키지를 게시하려면 등록 시 제공되는 NuGetApiKey가 필요하기 때문입니다.This is because publishing packages requires a NuGetApiKey, which is provided upon registration. 등록하려면 개인, 회사 또는 학교 계정을 사용하여 PowerShell 갤러리에 로그인합니다.To register, use your personal, work, or school account to sign in to the PowerShell Gallery. 일회성 등록 프로세스는 최초 로그인 시 필요합니다.A one-time registration process is required when you sign in for the first time. 그 후에는 프로필 페이지에서 NuGetApiKey를 사용할 수 있습니다.Afterwards, your NuGetApiKey is available on your profile page.

갤러리에 등록했으면 Publish-Module 또는 Publish-Script cmdlet을 사용하여 갤러리에 패키지를 게시합니다.Once you have registered in the Gallery, use the Publish-Module or Publish-Script cmdlets to publish your package to the Gallery. 이러한 cmdlet을 실행하는 방법에 대한 자세한 내용은 게시 탭이나 Publish-ModulePublish-Script 설명서를 참조하세요.For more details on how to run these cmdlets, visit the Publish tab, or read the Publish-Module and Publish-Script documentation.

패키지를 설치하거나 저장하기 위해 갤러리에 등록 또는 로그인할 필요는 없습니다.You do not need to register or sign in to the Gallery to install or save packages.

이 오류는 다음과 같은 이유로 발생할 수 있습니다.This error can occur for the following reasons:

  • 지정된 API 키가 잘못되었습니다.The specified API key is invalid. 계정에서 유효한 API 키를 지정했는지 확인합니다.Ensure that you have specified the valid API key from your account. API 키를 가져오려면 프로필 페이지를 봅니다.To get your API key, view your profile page.
  • 지정된 패키지 이름이 사용자 소유가 아닙니다.The specified package name is not owned by you. API 키가 올바른지 확인했으면 사용하려는 이름과 동일한 이름의 패키지가 있는 것일 수 있습니다.If you have confirmed that your API key is correct, then there may already exist a package with the same name as the one you are trying to use. 소유자가 패키지를 목록에서 제거했을 수 있으며, 이 경우 검색 결과에 표시되지 않습니다.The package may have been unlisted by the owner, in which case it will not appear in any search results. 동일한 이름의 패키지가 이미 있는지 확인하려면 브라우저를 열고 패키지의 세부 정보 페이지(https://www.powershellgallery.com/packages/<packageName>)로 이동합니다.To determine if a package with the same name already exists, open a browser and navigate to the package's details page: https://www.powershellgallery.com/packages/<packageName>. 예를 들어 https://www.powershellgallery.com/packages/pester로 직접 이동하면 목록에 있는지 여부에 관계없이 Pester 모듈의 세부 정보 페이지가 표시됩니다.For example, navigating directly to https://www.powershellgallery.com/packages/pester will take you to the Pester module's details page, whether it is unlisted or not. 충돌하는 이름의 패키지가 이미 있고 목록에 표시되지 않는 경우 다음을 수행할 수 있습니다.If a package with a conflicting name already exists and is unlisted, you can:
    • 패키지에 대해 다른 이름을 선택합니다.Select another name for your package.
    • 기존 패키지의 소유자에게 문의합니다.Contact the owners of the existing package.

어제는 로그인할 수 있었는데 내 개인 계정으로 로그인할 수 없는 이유는 무엇인가요?Why can't I sign in with my personal account, but I could sign in yesterday?

갤러리 계정은 기본 메일 별칭의 변경을 허용하지 않습니다.Please be aware that your gallery account does not accommodate changes to your primary email alias. 자세한 내용은 Microsoft 메일 별칭을 참조하세요.For more information, see Microsoft Email Aliases.

범주 확인란 선택은 "이 범주에 있는 모든 패키지를 표시"하는 것입니다.By selecting a Category checkbox, you are stating "I would like to see all packages in this category." 선택한 범주에 있는 패키지만 표시됩니다.Only the packages in the selected categories will be displayed. 마찬가지로, 모든 범주 확인란 선택은 "모든 범주에 있는 모든 패키지를 표시"하는 것입니다.So similarly, by selecting all the Category checkboxes, you are stating "I would like to see all packages in any category." 하지만 갤러리에 있는 일부 패키지는 나열된 범주에 속하지 않으므로 결과에 표시되지 않습니다.But some packages in the gallery do not belong to any of the categories listed, so they will not appear in the results. 갤러리에 있는 모든 패키지를 보려면 모든 범주의 선택을 취소하거나 패키지 탭을 다시 선택합니다.To see all packages in the gallery, uncheck all the Categories, or select the packages tab again.

모든 종류의 PowerShell 모듈(스크립트 모듈, 이진 모듈 또는 매니페스트 모듈)을 갤러리에 게시할 수 있습니다.Any kind of PowerShell module (script modules, binary modules, or manifest modules) can be published to the gallery. 모듈을 게시하려면 PowerShellGet에 버전, 설명, 작성자, 사용 허가 방법 등의 몇 가지 정보가 필요합니다.To publish a module, PowerShellGet needs to know a few things about it - the version, description, author, and how it is licensed. 이 정보는 게시 프로세스의 일부로 모듈 매니페스트(.psd1) 파일 또는 Publish-Module cmdlet의 LicenseUri 매개 변수 값에서 읽어옵니다.This information is read as part of the publishing process from the module manifest (.psd1) file, or from the value of the Publish-Module cmdlet's LicenseUri parameter. 갤러리에 게시된 모든 모듈에는 모듈 매니페스트가 있어야 합니다.All modules published to the Gallery must have module manifests. 매니페스트에 다음 정보가 포함된 모든 모듈을 갤러리에 게시할 수 있습니다.Any module that includes the following information in its manifest can be published to the Gallery:

  • 버전Version
  • 설명Description
  • AuthorAuthor
  • 매니페스트의 PrivateData 섹션이나 Publish-Module cmdlet의 LicenseUri 매개 변수에 포함된 모듈 사용 조건에 대한 URI입니다.A URI to the license terms of the module, either as part of the PrivateData section of the manifest, or in the LicenseUri parameter of the Publish-Module cmdlet.

올바른 형식의 모듈 매니페스트를 만들려면 어떻게 하나요?How do I create a correctly-formatted module manifest?

모듈 매니페스트를 만드는 가장 쉬운 방법은 New-ModuleManifest cmdlet을 실행하는 것입니다.The easiest way to create a module manifest is to run the New-ModuleManifest cmdlet. PowerShell 5.0 이상에서 New-ModuleManifest는 ProjectUri, LicenseUri, Tags 등의 유용한 메타데이터에 빈 필드를 사용하여 올바른 형식의 모듈 매니페스트를 생성합니다.In PowerShell 5.0 or newer, New-ModuleManifest generates a correctly-formatted module manifest with blank fields for useful metadata like ProjectUri, LicenseUri, and Tags. 단순히 빈 칸을 채우거나 생성된 매니페스트를 올바른 형식의 예로 사용합니다.Simply fill in the blanks, or use the generated manifest as an example of correct formatting.

모든 필수 메타데이터 필드가 올바르게 채워졌는지 확인하려면 Test-ModuleManifest cmdlet을 사용합니다.To verify that all required metadata fields have been properly filled, use the Test-ModuleManifest cmdlet.

모듈 매니페스트 파일 필드를 업데이트하려면 Update-ModuleManifest cmdlet을 사용합니다.To update the module manifest file fields, use the Update-ModuleManifest cmdlet.

모든 종류의 PowerShell 스크립트(스크립트 또는 워크플로)를 갤러리에 게시할 수 있습니다.Any kind of PowerShell script (scripts or workflows) can be published to the gallery. 스크립트를 게시하려면 PowerShellGet에 버전, 설명, 작성자, 사용 허가 방법 등의 몇 가지 정보가 필요합니다.To publish a script, PowerShellGet needs to know a few things about it - the version, description, author, and how it is licensed. 이 정보는 게시 프로세스의 일부로 스크립트 파일의 PSScriptInfo 섹션이나 Publish-Script cmdlet의 LicenseUri 매개 변수 값에서 읽어옵니다.This information is read as part of the publishing process from the script file's PSScriptInfo section, or from the value of the Publish-Script cmdlet's LicenseUri parameter. 갤러리에 게시된 모든 스크립트에는 메타데이터 정보가 있어야 합니다.All scripts published to the Gallery must have metadata information. PSScriptInfo 섹션에 다음 정보가 포함된 모든 스크립트를 갤러리에 게시할 수 있습니다.Any script that includes the following information in its PSScriptInfo section can be published to the Gallery:

  • 버전Version
  • 설명Description
  • AuthorAuthor
  • 스크립트의 PSScriptInfo 섹션이나 Publish-Script cmdlet의 LicenseUri 매개 변수에 포함된 모듈 사용 조건에 대한 URI입니다.A URI to the license terms of the script, either as part of the PSScriptInfo section of the script, or in the LicenseUri parameter of the Publish-Script cmdlet.

텍스트 상자에 찾으려는 내용을 입력합니다.Type what you are looking for in the text box. 예를 들어 Azure SQL과 관련된 모듈을 찾으려는 경우 "azure sql"을 입력하면 됩니다.For example, if you want to find modules that are related to Azure SQL, just type "azure sql". 검색 엔진은 제목, 설명 및 메타데이터를 비롯하여 게시된 모든 패키지에서 해당 키워드를 검색합니다.Our search engine will look for those keywords in all published packages, including titles, descriptions and across metadata. 그런 다음 가중치가 적용된 품질 점수를 기준으로 가장 가까운 일치 항목을 표시합니다.Then, based on a weighted quality score, it will display the closest matches. 다음 필드에 대한 검색 쿼리에 필드:"값" 구문을 사용하여 특정 필드를 기준으로 검색할 수도 있습니다.You can also search by specific field using field:"value" syntax in the search query for the following fields:

  • 태그Tags
  • 함수Functions
  • CmdletCmdlets
  • DscResourcesDscResources
  • PowerShellVersionPowerShellVersion

따라서 예를 들어 PowerShellVersion:"2.0"을 검색하면 해당 모듈/스크립트 매니페스트에 따라 PowerShellVersion 2.0과 호환되는 결과만 표시됩니다.So, for example, when you search for PowerShellVersion:"2.0" only results that are compatible with PowerShellVersion 2.0 (based on their module/script manifest) will be displayed.

올바른 형식의 스크립트 파일을 만들려면 어떻게 하나요?How do I create a correctly-formatted script file?

올바르 형식의 스크립트 파일을 만드는 가장 쉬운 방법은 New-ScriptFileInfo cmdlet을 실행하는 것입니다.The easiest way to create a properly-formatted script file is to run the New-ScriptFileInfo cmdlet. PowerShell 5.0에서 New-ScriptFileInfo는 ProjectUri, LicenseUri, Tags 등의 유용한 메타데이터에 빈 필드를 사용하여 올바른 형식의 스크립트 파일을 생성합니다.In PowerShell 5.0, New-ScriptFileInfo generates a correctly-formatted script file with blank fields for useful metadata like ProjectUri, LicenseUri, and Tags. 단순히 빈 칸을 채우거나 생성된 스크립트 파일을 올바른 형식의 예로 사용합니다.Simply fill in the blanks, or use the generated script file as an example of correct formatting.

모든 필수 메타데이터 필드가 올바르게 채워졌는지 확인하려면 Test-ScriptFileInfo cmdlet을 사용합니다.To verify that all required metadata fields have been properly filled, use the Test-ScriptFileInfo cmdlet.

스크립트 메타데이터 필드를 업데이트하려면 Update-ScriptFileInfo cmdlet을 사용합니다.To update the script metadata fields, use the Update-ScriptFileInfo cmdlet.

다른 어떤 유형의 PowerShell 모듈이 있나요?What other types of PowerShell Modules exist?

PowerShell 모듈이란 용어는 실제 기능을 구현하는 파일도 가리킵니다.The term PowerShell module also refers to the files that implement actual functionality. 스크립트 모듈 파일(.psm1)에는 PowerShell 코드가 들어 있습니다.Script module files (.psm1) contain PowerShell code. 이진 모듈 파일(.dll)에는 컴파일된 코드가 들어 있습니다.Binary module files (.dll) contain compiled code.

모듈을 이해하는 한 가지 방법은 다음과 같습니다. 모듈을 캡슐화하는 폴더는 모듈 폴더입니다.Here is one way to think about it: the folder that encapsulates the module is the module folder. 모듈 폴더에는 폴더의 내용을 설명하는 모듈 매니페스트(.psd1)가 포함될 수 있습니다.The module folder can contain a module manifest (.psd1) that describes the contents of the folder. 실제로 작업을 수행하는 파일은 스크립트 모듈 파일(.psm1) 및 이진 모듈 파일(.dll)입니다.The files that actually do the work are the script module files (.psm1) and the binary module files (.dll). DSC 리소스는 특정 하위 폴더에 있으며 스크립트 모듈 파일 또는 이진 모듈 파일로 구현됩니다.DSC resources are located in a specific sub-folder, and are implemented as script module files or binary module files.

갤러리에 있는 모든 모듈에는 모듈 매니페스트가 포함되고, 이러한 모듈에는 대부분 스크립트 모듈 파일 또는 이진 모듈 파일이 포함됩니다.All of the modules in the Gallery contain module manifests, and most of these modules contain script module files or binary module files. 이러한 다양한 의미 때문에 모듈 용어가 혼동을 줄 수 있습니다.The term module can be confusing because of these different meanings. 명시적으로 달리 언급되지 않은 경우 이 페이지에서 모듈 단어는 모두 이러한 파일이 포함된 모듈 폴더를 가리킵니다.Unless explicitly stated otherwise, all uses of the word module on this page refer to the module folder containing these files.

PackageManagement는 PowerShellGet과 어떤 관계가 있나요?How does PackageManagement relate to PowerShellGet? (개괄적인 답변)(High Level Answer)

PackageManagement는 모든 패키지 관리자 작업에 사용되는 공용 인터페이스입니다.PackageManagement is a common interface for working with any package manager. PowerShell 모듈, MSI, Ruby 보석, NuGet 패키지 또는 Perl 모듈 중 어떤 것을 처리하든 간에 PackageManagement 명령(Find-Package 및 Install-Package)을 사용하여 찾아서 설치할 수 있어야 합니다.Eventually, whether you're dealing with PowerShell modules, MSIs, Ruby gems, NuGet packages, or Perl modules, you should be able to use PackageManagement's commands (Find-Package and Install-Package) to find and install them. PackageManagement는 PackageManagement에 연결하는 각 패키지 관리자에 대한 패키지 공급자를 포함하여 이 작업을 수행합니다.PackageManagement does this by having a package provider for each package manager that plugs into PackageManagement. 공급자가 실제 작업을 모두 수행합니다. 리포지토리에서 콘텐츠를 가져와 로컬에 설치합니다.Providers do all of the actual work; they fetch content from repositories, and install the content locally. 패키지 공급자가 지정된 패키지 유형에 대한 기존 패키지 관리자 도구를 단순히 래핑하는 경우도 많습니다.Often, package providers simply wrap around the existing package manager tools for a given package type.

PowerShellGet은 PowerShell 패키지에 대한 패키지 관리자입니다.PowerShellGet is the package manager for PowerShell packages. PackageManagement를 통해 PowerShellGet 기능을 노출하는 PSModule 패키지 공급자가 있습니다.There is a PSModule package provider that exposes PowerShellGet functionality through PackageManagement. 이 때문에 Install-Module 또는 Install-Package -Provider PSModule을 실행하여 PowerShell 갤러리에서 모듈을 설치할 수 있습니다.Because of this, you can either run Install-Module or Install-Package -Provider PSModule to install a module from the PowerShell Gallery. Update-ModulePublish-Module을 비롯한 특정 PowerShellGet 기능은 PackageManagement 명령을 통해 액세스할 수 있습니다.Certain PowerShellGet functionality, including Update-Module and Publish-Module, cannot be accessed through PackageManagement commands.

요약하자면, PowerShellGet은 전적으로 PowerShell 콘텐츠에 대한 프리미엄 패키지 관리 환경 사용에 중점을 둡니다.In summary, PowerShellGet is solely focused on having a premium package management experience for PowerShell content. PackageManagement는 하나의 일반적인 도구 집합을 통해 모든 패키지 관리 환경을 노출하는 데 중점을 둡니다.PackageManagement is focused on exposing all package management experiences through one general set of tools. 이 응답이 만족스럽지 않은 경우 이 문서의 맨 아래에 있는 PackageManagement는 실제로 PowerShellGet과 어떤 관계가 있나요? 섹션에 자세한 답변이 나와 있습니다.If you find this answer unsatisfying, there is a long answer at the bottom of this document, in the How does PackageManagement actually relate to PowerShellGet? section.

자세한 내용은 PackageManagement 프로젝트 페이지를 참조하세요.For more information, please visit the PackageManagement project page.

NuGet은 PowerShellGet과 어떤 관계가 있나요?How does NuGet relate to PowerShellGet?

PowerShell 갤러리는 NuGet 갤러리의 수정된 버전입니다.The PowerShell Gallery is a modified version of the NuGet Gallery. PowerShellGet은 NuGet 공급자를 사용하여 PowerShell 갤러리 등의 NuGet 기반 리포지토리로 작업합니다.PowerShellGet uses NuGet provider to work with NuGet based repositories like the PowerShell Gallery.

유효한 모든 NuGet 리포지토리 또는 파일 공유에 대해 PowerShellGet을 사용할 수 있습니다.You can use PowerShellGet against any valid NuGet repository or file share. Register-PSRepository cmdlet을 실행하여 리포지토리를 추가하면 됩니다.You simply need to add the repository by running the Register-PSRepository cmdlet.

예.Yes.

PackageManagement는 실제로 PowerShellGet과 어떤 관계가 있나요?How does PackageManagement actually relate to PowerShellGet? (기술 세부 정보)(Technical Details)

내부적으로 PowerShellGet은 PackageManagement 인프라를 많이 활용합니다.Under the hood, PowerShellGet heavily leverages PackageManagement infrastructure.

PowerShell cmdlet 계층에서 Install-Module은 실제로 Install-Package -Provider PSModule을 둘러싼 씬 래퍼입니다.At the PowerShell cmdlet layer, Install-Module is actually a thin wrapper around Install-Package -Provider PSModule.

PackageManagement 패키지 공급자 계층에서 PSModule 패키지 공급자는 실제로 다른 PackageManagement 패키지 공급자를 호출합니다.At the PackageManagement package provider layer, the PSModule package provider actually calls into other PackageManagement package providers. 예를 들어 NuGet 기반 갤러리(예: PowerShell 갤러리)로 작업하는 경우 PSModule 패키지 공급자는 NuGet 패키지 공급자를 사용하여 리포지토리에서 작업합니다.For example, when you are working with NuGet-based galleries (such as the PowerShell Gallery), the PSModule package provider uses the NuGet Package Provider to work with the repository.

PowerShellGet 아키텍처

그림 1: PowerShellGet 아키텍처Figure 1: PowerShellGet Architecture

PowerShellGet을 실행하는 데 필요한 사항은 무엇인가요?What is required to run PowerShellGet?

일반적으로 최신 버전의 PowerShellGet 모듈을 선택하는 것이 좋습니다(.NET 4.5가 필요함).In general we recommend picking the latest version of PowerShellGet module (note that it requires .NET 4.5).

PowerShellGet 모듈을 사용하려면 PowerShell 3.0 이상이 있어야 합니다.The PowerShellGet module requires PowerShell 3.0 or newer.

따라서 PowerShellGet에는 다음 운영 체제 중 하나가 필요합니다.Therefore, PowerShellGet requires one of the following operating systems:

  • Windows 10Windows 10
  • Windows 8.1 ProWindows 8.1 Pro
  • Windows 8.1 EnterpriseWindows 8.1 Enterprise
  • Windows 7 SP1Windows 7 SP1
  • Windows Server 2016Windows Server 2016
  • Windows Server 2012 R2Windows Server 2012 R2
  • Windows Server 2008 R2 SP1Windows Server 2008 R2 SP1

PowerShellGet을 사용하려면 .NET Framework 4.5 이상도 있어야 합니다.PowerShellGet also requires .NET Framework 4.5 or above. .NET Framework 4.5 이상은 여기에서 설치할 수 있습니다.You can install .NET Framework 4.5 or above from here.

나중에 게시할 패키지의 이름을 예약할 수 있나요?Is it possible to reserve names for packages that will be published in future?

패키지 이름을 무단 사용할 수는 없습니다.It is not possible to squat package names. 기존 패키지가 해당 패키지에 더 맞는 이름을 사용한 경우 패키지의 소유자에게 문의하세요.If you feel that an existing package has taken the name which suits your package more, try contacting the owner of the package. 몇 주 내에 응답을 받지 못한 경우 지원 담당자에게 문의하면 PowerShell 갤러리 팀에서 살펴보겠습니다.If you didnt get response within a couple of weeks, you can contact support and the PowerShell Gallery team will look in to it.

패키지의 소유권을 클레임하려면 어떻게 하나요?How do I claim ownership for packages?

자세한 내용은 PowerShellGallery.com에서 패키지 소유자 관리를 참조하세요.Check out Managing Package Owners on PowerShellGallery.com for details.

내 패키지 라이선스를 위반하는 패키지 소유자에 대응하려면 어떻게 하나요?How do I deal with a package owner who is violating my package license?

PowerShell 커뮤니티에서 협력하여 패키지 소유자와 다른 패키지의 소유자 간에 발생할 수 있는 분쟁을 해결하는 것이 좋습니다.We encourage the PowerShell community to work together to resolve any disputes that may arise between package owners and the owners of other packages. PowerShellGallery.com 관리자가 중재하기 전에 작성된 분쟁 해결 프로세스를 따라야 합니다.We have crafted a dispute resolution process that we ask you to follow before PowerShellGallery.com administrators intercede.