PowerShell 함수를 사용하는 방법
- PowerShell에서 함수와 cmdlet의 차이
- PowerShell에서 함수 소개
- PowerShell에서 함수에 매개변수 추가
- PowerShell에서 함수에 간단한 매개변수 만들기

우리가 PowerShell 스크립트를 작성할 때 많은 선택지가 있습니다. 예를 들어, 모든 작업에 대해 하나의 코드 블록에 천 줄의 코드를 작성할 수 있습니다.
그러나 그렇게 하면 복잡해질 것입니다. 대신 PowerShell 함수를 작성해야 합니다.
PowerShell 함수는 코드의 사용성과 가독성을 극적으로 향상시켜 작업하기 훨씬 쉽게 만듭니다. 이 기사에서는 함수를 작성하고, 함수의 매개 변수를 추가 및 관리하며, 함수를 파이프라인 입력을 수락하도록 설정하는 방법을 배울 것입니다.
PowerShell에서 함수와 cmdlet의 차이
PowerShell 함수의 개념은 본토 PowerShell cmdlet과 유사하게 들릴 수 있습니다. 예를 들어, Write-Host
와 Start-Service
와 같은 명령은 함수와 매우 유사합니다.
그러나 cmdlet은 단일 문제를 해결하는 명명된 코드 조각이며 쉽게 사용자 정의할 수 없습니다. cmdlet과 함수의 차이는 이러한 구성들이 만들어지는 방식에 있습니다.
우리는 Get-Command
cmdlet과 그 -CommandType
매개 변수를 사용하여 어떤 명령이 cmdlet이고 어떤 것이 함수인지 볼 수 있습니다.
Get-Command -CommandType Function
위 명령은 현재 우리의 PowerShell 세션에 로드된 모든 함수 또는 PowerShell에서 사용할 수 있는 모듈 내의 함수를 반환합니다.
PowerShell에서 함수 소개
우리는 function
키워드를 사용하여 함수를 정의하고 그 뒤에 설명적인 사용자 정의 이름과 중괄호 세트를 따릅니다. 중괄호 안에는 PowerShell이 실행하기를 원하는 스크립트 블록이 있습니다.
아래에서 우리는 기본 함수와 해당 함수의 실행을 볼 수 있습니다. Install-Software
라는 함수는 Write-Host
를 사용하여 콘솔에 출력 메시지를 표시합니다 (주로 설치를 시뮬레이션하기 위함).
정의된 후에 우리는 함수의 이름을 사용하여 그 스크립트 블록 내부의 코드를 실행할 수 있습니다.
예제 코드:
function Install-Software {
Write-Host 'The software has been installed.'
}
Install-Software
출력:
The software has been installed.
PowerShell에서 동사-명사 구문을 사용한 함수 이름 명명 관례 모범 사례
함수의 이름은 중요합니다. 우리는 우리의 함수에 원하는 이름을 붙일 수 있지만 이름은 항상 함수가 하는 일을 설명해야 합니다.
PowerShell의 함수 이름 명명 관례 모범 사례는 동사-명사 구문입니다.
항상 함수 이름을 동사로 시작하고 그 뒤에 대시와 명사를 붙여야 합니다. Get-Verb
cmdlet을 사용하여 승인된
동사 목록을 찾으십시오.
PowerShell에서 고급 함수 정의
이 튜토리얼은 우리가 이전 코드를 PowerShell 콘솔에 직접 복사하여 붙여넣었다고 가정합니다. 우리는 스크립트에서 함수를 정의할 수도 있습니다.
우리는 이전 섹션에서 작은 함수를 다루었으므로 콘솔에서 정의하는 것은 문제가 아니었습니다. 그러나 대부분의 경우 훨씬 더 큰 함수를 가질 것입니다.
따라서 이러한 함수를 스크립트나 모듈에 정의한 다음 해당 스크립트나 모듈을 호출하여 함수를 메모리에 로드하는 것이 더 쉬울 것입니다.
우리가 상상할 수 있듯이, 기능을 조정할 때마다 더 큰 함수를 다시 입력하는 것은 혼란스러울 수 있습니다.
PowerShell에서 함수에 매개변수 추가
함수는 아무 숫자의 매개변수를 가질 수 있습니다. 우리가 함수를 만들 때 매개변수를 포함하고 그 매개변수가 어떻게 작동할지 결정할 수 있는 선택지가 있습니다.
매개변수는 선택적이거나 필수일 수 있으며, 제한된 인수 목록 중 하나를 강제로 수용하도록 하거나 무엇이든 수용하도록 할 수 있습니다.
예를 들어, Install-Software
함수로 설치하는 가상의 소프트웨어는 이전에 많은 버전을 가질 수 있습니다. 그러나 현재 Install-Software
함수는 사용자가 설치할 버전을 지정할 수 있는 방법을 제공하지 않습니다.
우리가 그 함수를 사용하는 유일한 사람이라면, 특정 버전을 원할 때마다 그 안의 코드를 변경할 수 있지만, 그럴 경우 많은 시간을 소모하게 될 것입니다. 이 방법은 잠재적인 오류가 발생할 수 있으며, 우리는 다른 사람들이 우리의 코드를 사용할 수 있게 하기를 원합니다.
함수에 매개변수를 도입하면 가변성을 가질 수 있습니다. 변수들이 우리가 동일한 상황의 다양한 버전을 처리할 수 있는 스크립트를 작성하도록 허용했듯이, 매개변수는 우리가 하나의 작업을 여러 방식으로 수행하는 단일 함수를 작성할 수 있게 해줍니다.
이 경우, 우리는 동일한 소프트웨어의 버전을 설치하고 여러 컴퓨터에서 그렇게 하기 원합니다.
먼저, 사용자가 설치할 버전을 지정할 수 있도록 하는 매개변수를 함수에 추가합시다.
PowerShell에서 함수에 간단한 매개변수 만들기
함수에서 매개변수를 정의하려면 매개변수 블록이 필요합니다. 매개변수 블록은 함수의 모든 매개변수를 포함합니다.
param
키워드로 매개변수 블록을 정의하고 괄호를 따릅니다. 아래와 같이 표시됩니다.
예제 코드:
function Install-Software {
[CmdletBinding()]
param()
Write-Host 'The software has been installed.'
}
이 시점에서 함수의 실제 기능은 조금도 변경되지 않았습니다. 우리는 단지 매개변수를 준비하기 위해 배관을 설치한 것입니다.
param
블록을 추가한 후, 아래와 같이 괄호 안에 매개변수를 넣어 매개변수를 생성할 수 있습니다.
예제 코드:
function Install-Software {
[CmdletBinding()]
param(
[Parameter()]
[string] $Version
)
Write-Host "The software version $Version has been installed."
}
위의 param
블록 내부에서 우리는 먼저 Parameter
블록을 정의합니다. Parameter()
블록을 사용하면 매개변수를 “고급 매개변수"로 변환합니다.
여기와 같은 빈 param
블록은 아무것도 하지 않지만 필수적이며, 다음 섹션에서 사용하는 방법을 설명하겠습니다.
우선 매개변수 이름 앞에 있는 [string]
타입에 집중하겠습니다. 매개변수의 타입을 매개변수 변수 이름 앞의 대괄호 안에 배치하여 유형을 캐스팅합니다.
PowerShell은 항상 값을 문자열로 기본값을 설정합니다. 위에서 $Version
변수에 전달되는 모든 것은 항상 문자열로 취급됩니다.
우리는 또한 $Version
을 우리의 Write-Host
문에 추가합니다. 그런 다음 Version
매개변수를 가진 Install-Software
함수를 실행하고 버전 번호를 전달하면, 그렇게 나타내는 메시지를 보여줄 것입니다.
예제 코드:
Install-Software -Version 2
출력:
The software version 2 has been installed.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn