수색…


소개

PowerShell 버전 2.0부터 개발자는 PowerShell 모듈을 만들 수 있습니다. PowerShell 모듈은 일반적인 기능 집합을 캡슐화합니다. 예를 들어 다양한 클라우드 서비스를 관리하는 공급 업체별 PowerShell 모듈이 있습니다. 또한 소셜 미디어 서비스와 상호 작용하는 일반 PowerShell 모듈이 있으며 Base64 인코딩, 명명 된 파이프로 작업하는 등의 일반적인 프로그래밍 작업을 수행합니다.

모듈은 명령 별칭, 함수, 변수, 클래스 등을 노출 할 수 있습니다.

모듈 매니페스트 만들기

@{
  RootModule = 'MyCoolModule.psm1'
  ModuleVersion = '1.0'
  CompatiblePSEditions = @('Core')
  GUID = '6b42c995-67da-4139-be79-597a328056cc'
  Author = 'Bob Schmob'
  CompanyName = 'My Company'
  Copyright = '(c) 2017 Administrator. All rights reserved.'
  Description = 'It does cool stuff.'
  FunctionsToExport = @()
  CmdletsToExport = @()
  VariablesToExport = @()
  AliasesToExport = @()
  DscResourcesToExport = @()
}

모든 좋은 PowerShell 모듈에는 모듈 목록이 있습니다. 모듈 매니페스트에는 PowerShell 모듈에 대한 메타 데이터 만 포함되며 모듈의 실제 내용은 정의하지 않습니다.

매니페스트 파일은 HashTable을 포함하는 .psd1 파일 확장명을 가진 PowerShell 스크립트 파일입니다. Manifest의 HashTable에는 PowerShell이 ​​PowerShell 모듈 파일로 올바르게 해석 할 수 있도록 특정 키가 있어야합니다.

위의 예는 모듈 목록을 구성하는 핵심 HashTable 키 목록을 제공하지만 다른 여러 가지가 있습니다. New-ModuleManifest 명령을 사용하면 새 모듈 매니페스트 스켈레톤을 만들 수 있습니다.

간단한 모듈 예제

function Add {
  [CmdletBinding()]
  param (
    [int] $x
  , [int] $y
  )

  return $x + $y
}

Export-ModuleMember -Function Add

이것은 PowerShell 스크립트 모듈 파일의 간단한 예제입니다. 이 파일은 MyCoolModule.psm1 이라고하며 모듈 목록 (.psd1) 파일에서 참조됩니다. Export-ModuleMember 명령을 사용하면 모듈에서 모듈의 사용자에게 "내보내거나 내보내는"함수를 지정할 수 있습니다. 일부 함수는 내부 전용이므로 노출되지 않아야 Export-ModuleMember 호출에서 생략됩니다.

모듈에서 변수 내보내기

$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName

모듈에서 변수를 내보내려면 -Variable 매개 변수와 함께 Export-ModuleMember 명령을 사용합니다. 그러나 변수가 모듈 매니페스트 (.psd1) 파일에도 명시 적으로 내보내지지 않으면 변수가 모듈 소비자에게 표시되지 않습니다. 모듈 명단을 "게이트 키퍼"처럼 생각하십시오. 함수 또는 변수가 모듈 매니페스트에 허용되지 않으면 모듈 소비자에게 표시되지 않습니다.

참고 : 변수 내보내기는 클래스의 필드를 공용으로 만드는 것과 유사합니다. 그것은 권하지 않습니다. 필드를 가져 오는 함수와 필드를 설정하는 함수를 노출하는 것이 좋습니다.

PowerShell 모듈 구성

단일 .psm1 PowerShell 스크립트 모듈 파일에 모든 함수를 정의하는 대신 함수를 개별 파일로 분리 할 수 ​​있습니다. 그런 다음이 파일을 스크립트 모듈 파일에서 점으로 .psm1 있습니다. 스크립트 모듈 파일은 .psm1 파일의 일부인 것처럼 처리합니다.

다음 모듈 디렉토리 구조를 고려하십시오.

\MyCoolModule
  \Functions
    Function1.ps1
    Function2.ps1
    Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1

MyCoolModule.psm1 파일에서 다음 코드를 삽입 할 수 있습니다.

Get-ChildItem -Path $PSScriptRoot\Functions | 
  ForEach-Object -Process { . $PSItem.FullName }

그러면 개별 기능 파일이 .psm1 모듈 파일에 점으로 표시됩니다.

모듈 위치

PowerShell은 $ Env : PSModulepath에 나열된 디렉터리에서 모듈을 찾습니다.

foo 라는 폴더에있는 foo 라는 Import-Module fooImport-Module foo 와 함께 발견됩니다.

이 폴더에서 PowerShell은 모듈 목록 (foo.psd1), 모듈 파일 (foo.psm1), DLL (foo.dll)을 찾습니다.

모듈 멤버 가시성

기본적으로 모듈에 정의 된 기능 만 모듈 바깥 쪽에서 볼 수 있습니다. 즉, 모듈에서 변수와 별칭을 정의하면 모듈의 코드를 제외하고는 변수와 별칭을 사용할 수 없습니다.

이 동작을 재정의하려면 Export-ModuleMember cmdlet을 사용할 수 있습니다. 그것은라는 매개 변수가 -Function , -Variable , 그리고 -Alias 당신은 회원이 수출되는 정확하게 지정할 수 있습니다.

Export-ModuleMember 를 사용하면 지정한 항목 표시된다는 점에 유의해야합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow