PowerShell 문법 다이어그램 이해하기
PowerShell 문법 다이어그램 이해하기 (about_Command_Syntax)
PowerShell 명령을 제대로 만들려면 문법 다이어그램을 읽을 수 있어야 해요. 이 글에서는 Get-Help와 Get-Command가 보여주는 문법 다이어그램의 기호와 읽는 법을 하나씩 짚어 드릴게요.
본문
간단 설명
PowerShell에서 사용되는 문법 다이어그램을 설명해요.
자세한 설명
Get-Help와 Get-Command cmdlet은 명령을 올바르게 구성하도록 돕는 문법 다이어그램을 보여줘요. 이 글에서는 그 문법 다이어그램을 어떻게 해석하는지 설명할게요.
명령의 문법 가져오기
명령의 문법을 얻는 방법은 두 가지예요. 바로 Get-Help와 Get-Command예요.
Get-Command
Get-Command 명령은 시스템에 있는 어떤 명령이든 정보를 얻을 때 쓸 수 있어요. Syntax 매개 변수를 사용하면 그 명령의 문법을 얻을 수 있어요.
Get-Command Get-Command -Syntax
그 결과로 나오는 문법 다이어그램은 이렇게 생겼어요.
Get-Command [[-ArgumentList] <Object[]>] [-Verb <string[]>] [-Noun <string[]>]
[-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>]
[-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported]
[-ParameterName <string[]>] [-ParameterType <PSTypeName[]>]
[<CommonParameters>]
Get-Command [[-Name] <string[]>] [[-ArgumentList] <Object[]>]
[-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>]
[-CommandType <CommandTypes>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo]
[-All] [-ListImported] [-ParameterName <string[]>]
[-ParameterType <PSTypeName[]>] [-UseFuzzyMatching]
[-FuzzyMinimumDistance <uint>] [-UseAbbreviationExpansion]
[<CommonParameters>]
Get-Help
Get-Help 명령은 PowerShell 명령에 대한 자세한 정보를 제공해요. 문법, cmdlet과 매개 변수에 대한 상세 설명, 예시까지 포함돼요. Get-Help 명령의 출력은 명령에 대한 간단한 설명으로 시작한 다음 문법이 이어져요.
Get-Help Get-Command
아래 출력은 문법 설명에 초점을 맞추기 위해 줄여서 보여준 거예요.
NAME
Get-Command
SYNOPSIS
Gets all commands.
SYNTAX
Get-Command [[-Name] <System.String[]>] [[-ArgumentList] <System.Object[]>]
[-All] [-CommandType {Alias | Function | Filter | Cmdlet | ExternalScript |
Application | Script | Workflow | Configuration | All}]
[-FullyQualifiedModule <Microsoft.PowerShell.Commands.ModuleSpecification[]>]
[-ListImported] [-Module <System.String[]>] [-ParameterName <System.String[]>]
[-ParameterType <System.Management.Automation.PSTypeName[]>]
[-ShowCommandInfo] [-Syntax] [-TotalCount <System.Int32>]
[-UseAbbreviationExpansion] [-UseFuzzyMatching] [<CommonParameters>]
Get-Command [[-ArgumentList] <System.Object[]>] [-All]
[-FullyQualifiedModule <Microsoft.PowerShell.Commands.ModuleSpecification[]>]
[-ListImported] [-Module <System.String[]>] [-Noun <System.String[]>]
[-ParameterName <System.String[]>]
[-ParameterType <System.Management.Automation.PSTypeName[]>]
[-ShowCommandInfo] [-Syntax] [-TotalCount <System.Int32>]
[-Verb <System.String[]>] [<CommonParameters>]
...
Get-Help의 출력은 Get-Command의 출력과 조금 달라요. CommandType 매개 변수의 문법 차이를 살펴볼게요. Get-Command는 매개 변수 형식을 [CommandTypes] 열거형으로 보여주는 반면, Get-Help는 그 열거형이 가질 수 있는 값을 보여줘요.
매개 변수 집합
PowerShell 명령의 매개 변수는 매개 변수 집합(parameter set)으로 묶여서 나열돼요. 한 PowerShell 명령은 매개 변수 집합을 하나 이상 가질 수 있어요. 앞선 예시에서 본 것처럼 Get-Command cmdlet에는 두 개의 매개 변수 집합이 있어요.
어떤 cmdlet 매개 변수는 특정 매개 변수 집합에만 있는 고유한 것도 있고, 여러 매개 변수 집합에 걸쳐 나타나는 것도 있어요. 각 매개 변수 집합은 유효한 명령 하나의 형식을 나타내요. 즉, 한 명령에서 함께 사용할 수 있는 매개 변수만 포함돼요. 같은 명령에서 함께 쓸 수 없는 매개 변수들은 서로 다른 매개 변수 집합으로 나뉘어요.
예를 들어 Get-Random cmdlet에는 다음과 같은 매개 변수 집합이 있어요.
$cmd = Get-Command Get-Random
$cmd.ParameterSets |
Select-Object Name, IsDefault, @{n='Parameters';e={$_.ToString()}} |
Format-Table -Wrap
Name IsDefault Parameters
---- --------- ----------
RandomNumberParameterSet True [[-Maximum] <Object>] [-SetSeed <int>]
[-Minimum <Object>] [-Count <int>]
[<CommonParameters>]
RandomListItemParameterSet False [-InputObject] <Object[]> [-SetSeed <int>]
[-Count <int>] [<CommonParameters>]
ShuffleParameterSet False [-InputObject] <Object[]> -Shuffle
[-SetSeed <int>] [<CommonParameters>]
- 첫 번째 매개 변수 집합은 난수 하나 이상을 반환하며
Minimum,Maximum,Count매개 변수를 가져요. - 두 번째 매개 변수 집합은 객체 집합에서 무작위로 선택한 객체 하나를 반환하며
InputObject와Count매개 변수를 포함해요. - 세 번째 매개 변수 집합에는
Shuffle매개 변수가 있어서 카드 덱을 섞듯 객체 컬렉션을 무작위 순서로 반환해요. - 모든 매개 변수 집합에는
SetSeed매개 변수와 공통 매개 변수(common parameters)가 있어요.
이 매개 변수 집합들을 살펴보면 InputObject와 Count 매개 변수는 같은 명령에서 함께 쓸 수 있지만, Maximum과 Shuffle 매개 변수는 함께 쓸 수 없다는 걸 알 수 있어요.
모든 cmdlet에는 기본 매개 변수 집합(default parameter set)도 있어요. 기본 매개 변수 집합은 특정 매개 변수 집합에 고유한 매개 변수를 지정하지 않았을 때 사용돼요. 예를 들어 매개 변수 없이 Get-Random을 실행하면 PowerShell은 RandomNumberParameterSet 집합을 쓴다고 가정해서 난수 하나를 반환해요.
문법 다이어그램의 기호
문법 다이어그램은 명령 이름, 명령의 매개 변수, 매개 변수 값을 나열해요.
문법 다이어그램에서는 다음 기호들을 사용해요.
하이픈(-)은 매개 변수 이름을 나타내요. 명령에서 하이픈은 매개 변수 이름 바로 앞에 공백 없이 입력해요. 문법 다이어그램에 적힌 그대로예요.
예를 들어 Get-Command의 Name 매개 변수를 쓰려면 Get-Command -Name처럼 입력하면 돼요.
꺾쇠 괄호(< >)는 자리 표시자 텍스트를 나타내요. 명령에서 꺾쇠 괄호나 자리 표시자 텍스트를 입력하지 않아요. 대신 그 괄호가 설명하는 항목으로 바꿔 넣으면 돼요.
꺾쇠 괄호 안의 자리 표시자는 매개 변수가 받는 값의 .NET 형식을 알려줘요. 예를 들어 Get-Command cmdlet의 Name 매개 변수를 쓰려면 <string[]>을 쉼표(,)로 구분한 문자열 하나 이상으로 바꿔 넣어요.
.NET 형식에 붙는 대괄호([])는 그 매개 변수가 해당 형식의 값을 하나 이상 받을 수 있다는 뜻이에요. 값을 쉼표로 구분한 목록으로 입력하면 돼요.
예를 들어 New-Alias cmdlet의 Name과 Value 매개 변수는 각각 문자열 하나씩만 받아요.
New-Alias [-Name] <string> [-Value] <string>
New-Alias -Name MyAlias -Value mycommand.exe
하지만 Get-Process의 Name 매개 변수는 문자열 하나 이상을 받을 수 있어요.
Get-Process [-Name] <string[]>
Get-Process -Name Explorer, Winlogon, Services
값이 없는 매개 변수
일부 매개 변수는 입력을 받지 않아서 매개 변수 값이 없어요. 값이 없는 매개 변수를 [switch] 매개 변수라고 해요. [switch] 매개 변수는 불리언 값처럼 사용돼요. 기본값은 $false예요. [switch] 매개 변수를 사용하면 그 값이 $true로 설정돼요.
예를 들어 Get-Command의 ListImported 매개 변수는 [switch] 매개 변수예요. ListImported 매개 변수를 사용하면 cmdlet은 현재 세션의 모듈에서 가져온 명령만 반환해요.
Get-Command [-ListImported]
매개 변수 주변의 대괄호([ ])는 선택 항목을 나타내요. 매개 변수와 그 값을 모두 생략할 수 있어요. 예를 들어 Get-Command의 CommandType 매개 변수와 그 값은 둘 다 선택 사항이라서 대괄호 안에 있어요.
Get-Command [-CommandType <CommandTypes>]
매개 변수 이름 주변에만 있고 매개 변수 값 주변에는 없는 대괄호는 매개 변수 이름이 선택 사항이라는 뜻이에요. 이런 매개 변수를 위치 매개 변수(positional parameter)라고 해요. 매개 변수 값은 올바른 매개 변수에 바인딩되도록 올바른 순서로 입력해야 해요.
예를 들어 New-Alias cmdlet에서는 Name과 Value 매개 변수의 값은 필수지만, 매개 변수 이름인 -Name과 -Value는 선택 사항이에요.
New-Alias [-Name] <string> [-Value] <string>
New-Alias MyAlias mycommand.exe
각 매개 변수 집합에서 매개 변수는 위치 순서대로 나타나요. 명령에서 매개 변수의 순서는 선택 사항인 매개 변수 이름을 생략할 때만 의미가 있어요. 매개 변수 이름을 생략하면 PowerShell은 위치와 형식에 따라 값을 매개 변수에 할당해요. 매개 변수의 위치에 대한 자세한 내용은 about_Parameters를 참고해요.
중괄호({})는 "열거형(enumeration)"을 나타내요. 즉, 매개 변수가 받을 수 있는 유효한 값의 집합이에요.
중괄호 안의 값들은 세로 막대(|)로 구분돼요. 이 막대는 배타적 선택(exclusive-OR choice)을 뜻해서 중괄호 안에 나열된 값 중 하나만 고를 수 있어요.
예를 들어 New-Alias cmdlet의 문법에는 Option 매개 변수에 대한 값 열거형이 다음과 같이 포함돼 있어요.
New-Alias -Option {None | ReadOnly | Constant | Private | AllScope}
중괄호와 세로 막대는 Option 매개 변수의 나열된 값 중 ReadOnly나 AllScope처럼 어떤 값이든 하나만 고를 수 있다는 뜻이에요.
New-Alias -Option ReadOnly