about_Parameter_Binding
about_Parameter_Binding
PowerShell이 명령을 실행할 때 "어떤 매개변수에 어떤 값을 넣을까"를 결정하는 과정, 바로 **매개변수 바인딩(Parameter Binding)**을 다뤄요. 명령줄에서 준 값이 언제, 어떤 순서로 매개변수에 들어가는지 머릿속에 그림이 그려지도록 차근차근 설명해 드릴게요.
본문
짧게 말하면
매개변수 바인딩이란 PowerShell이 어떤 매개변수 집합(parameter set)을 쓰고 있는지 판별하고, 명령의 매개변수에 값을 연결(bind)하는 과정이에요. 이 값은 명령줄에서 올 수도 있고, 파이프라인에서 올 수도 있어요.
자세히 알아보기
바인딩은 먼저 명령줄 인수부터 처리하는 걸로 시작해요.
이름 있는 매개변수(Named parameters) 바인딩
명령줄에서 따옴표로 감싸지 않고 대시(-)로 시작하는 토큰을 찾아요. 그 토큰이 콜론(:)으로 끝나면 인수가 필수예요. 콜론이 없다면 해당 매개변수의 타입을 보고 인수가 필요한지 판단해요. 값이 필요하다면 인수의 타입을 매개변수가 요구하는 타입으로 변환을 시도하고, 변환이 성공하면 그 매개변수에 바인딩해요.
위치 매개변수(Positional parameters) 바인딩
아직 쓰이지 않은 명령줄 인수가 남아 있다면, 위치 매개변수를 받는 바인딩되지 않은 매개변수를 찾아서 그 값들을 연결해 봐요.
명령줄 인수를 바인딩한 다음에는 파이프라인 입력 바인딩을 시도해요. 파이프라인에서 값을 받아들이는 매개변수는 다음 두 속성 중 하나(또는 둘 다)를 가져요.
ValueFromPipeline— 파이프라인의 값을 타입을 기준으로 매개변수에 바인딩해요. 인수의 타입이 매개변수의 타입과 일치해야 해요.ValueFromPipelineByPropertyName— 파이프라인의 값을 이름을 기준으로 매개변수에 바인딩해요. 파이프라인의 객체에 매개변수 이름(또는 그 별칭 중 하나)과 일치하는 속성이 있어야 해요. 속성의 타입이 매개변수의 타입과 일치하거나 변환 가능해야 하고요.
PowerShell은 파이프라인 입력을 다음 순서대로 바인딩하려고 해요.
-
타입 변환 없이
ValueFromPipeline매개변수 바인딩 시도 — 파이프라인에서 값으로 바인딩하되 타입이 정확히 일치할 때예요. 명령에 파이프라인 입력이 있고 아직 바인딩되지 않은 매개변수가 남아 있다면, 타입이 정확히 일치하는 매개변수를 찾아 연결해요. -
타입 변환 없이
ValueFromPipelineByPropertyName매개변수 바인딩 시도 — 값 기준으로 일치하는 게 없다면, 이제 이름 기준으로 정확히 일치하는 걸 찾아요. 입력 객체에서 매개변수 이름이나 그 별칭과 일치하는 속성을 찾고, 타입이 정확히 일치하면 바인딩해요. -
타입 변환을 사용해
ValueFromPipeline매개변수 바인딩 시도 — 파이프라인 입력이 아직 바인딩되지 않았다면, 파이프라인 입력을 요구되는 타입으로 변환해 봐요. 변환이 실패하면 그 매개변수는 바인딩되지 않아요. -
타입 변환을 사용해
ValueFromPipelineByPropertyName매개변수 바인딩 시도 — 속성의 이름이 매개변수 이름이나 그 별칭 중 하나와 일치해야 해요. 입력 타입이 일치하지 않으면, 입력을 일치하는 타입으로 변환을 시도해요. 변환이 실패하면 그 매개변수는 바인딩되지 않아요.
매개변수 바인딩 시각화하기
매개변수 바인딩 문제를 디버깅하는 건 꽤 까다로울 수 있어요. 이때 Trace-Command cmdlet을 쓰면 매개변수 바인딩 과정을 직접 눈으로 볼 수 있어요. 간단한 파이프라인에 대한 매개변수 바인딩을 추적하는 예시를 볼게요.
Trace-Command -PSHost -Name ParameterBinding -Expression {
Get-Item *.txt | Remove-Item
}
출력은 Expression 안 명령들에 대한 매개변수 바인딩 과정의 모든 단계를 보여줘요. 출력이 다소 장황할 수 있지만, 매개변수가 예상대로 바인딩되지 않는 이유를 이해하는 데 큰 도움이 돼요. 전체 예시는 Visualize parameter binding 문서에서 확인할 수 있어요.
더 알아보기
- Visualize parameter binding (Microsoft Learn) —
Trace-Command로 실제 바인딩 과정을 따라가는 완전한 예시 - about_Parameters (Microsoft Learn) — 매개변수가 선언되는 방식과 각 속성의 의미
- about_Pipelines (Microsoft Learn) — 파이프라인 입력이 명령 사이를 어떻게 흐르는지