ⓟrogramming/PowerShell
POWERSHELL SCRIPT - 모듈화
뚱땡이 우주인
2018. 6. 28. 00:03
모듈화는 특정 작업을 위해 작성한 여러 가지 도구(개별 스크립트)의 내용을 간단히 하나의 파일에 모으고, 각 도구를 별도의 블록으로 구분하는 일
파워셸에서는 이렇게 블록으로 구분한 각 도구의 하나의 기능 집합으로 인식하며, 이를 함수(Funciton)이라고 부른다.
파워셸 함수 템플릿
Function Noun-Verb { [CmdletBindin()] param() BEGIN{} PROCESS{} END{} }
param()
Param 내에는 대괄호 내에 매개변수의 처리 방식을 설정하는 부분과 매개변수의 형식과 이름을 선언. 함수에서 매개 변수가 필요 없는 경우는 비워둔다.
[Paramter(위치, 필수 매개변수, 파이프라인 입력)]
[데이터 형식]$변수명 = 기본값(옵션)
- 함수에서 입력되는 매개변수 위치 : 지정하지 않아도 매개변수 위치를 자동으로 감지한다. 지정하면 조금 더 나은 가독성을 제공할 수 있다.
Position = 정수 (예, 0, 1, 2 ....)
- 필수 매개변수 여부
Mandatory=$True or $False (False가 기본값)
- 파이프라인 입력 허용 여부
ValueFromPipeline=$True (기본값은 $False)
BEGIN
제일 먼저 실행되는 부분이며 한번만 실행된다.
주 로직이 실행되기 전에 사전 설정이 필요한 구문을 작성한다.
예를들어 데이터베이스 초기 연결 설정이 필요한 경우에 사용한다.
특별한 설정이 필요 없다면 비워 놓는다.
PROCESS
함수의 주 기능 로직이 들어가는 부분이다.
블록 내에 반복 처리하는 로직이 있는 경우, 초기 설정과 같은 구문을 BEGIN 블록에 넣지 않고 여기다 넣는다면 반복 실행하게 되어 의도치 않은 결과가 나올 수 있다.
END
제일 마지막에 실행되는 부분이다.
주로 정리 작업에 해당되는 구문이 여기에 들어간다.
예를들어 데이터 베이스 연결 종료와 같은 처리를 하는 곳이다.
function Get-SecurituEvents { [CmdletBinding()] Param( [Parameter(Position=0, Mandatory=$true)] [string]$ComupterName, [int]$EventId = 4634 ) BEGIN { $LogName = Read-Host "로그 이름을 입력하세요." } PROCESS { Get-EventLog -ComputerName $ComupterName ` -LogName $LogName | Where-Object -Property EventId -eq $EventId | Select-Object -First 7 } END {} }BEGIN 블록에서 이벤트 뷰어에서 가져올 로그이름을 입력 받는 기본 설정 구문을 작성했다.
PROCESS 블록에서는 이벤트 ID를 필터링해서 최초 7개의 로그 항목을 가져오는 작업 구문을 입력했다.
위 함수를 실행해 보자
- PowerShell ISE나 콘솔에서 함수가 들어 있는 스크립트 파일을 실행한다. 이때 스크립트 내에서 작성한 모두 함수가 메모리에 올라간다.
- 실행하고 싶은 함수 이름을 콘솔에서 호출한다.
스크립트 내에 작성한 함수를 쓸 수 있는지 확인하려면 PSDrive중 Function: 드라이브를 확인하면 된다.
PS > cd Function: PS Function:\> ls위 명령을 실행해 보면 Get-SecurituEvents 를 현재 파워셸 세션에서 사용할 수 있음을 알 수 있다.