PowerShell Variable 공급자
PowerShell Variable 공급자 (about_Variable_Provider)
파워셸에는 파일 시스템뿐 아니라 여러 가지 '드라이브'가 있어요. 그중 하나가 Variable: 드라이브인데, 이 드라이브는 지금 세션에서 쓰고 있는 모든 변수와 그 값을 바로 보여줘요. 이번 글에서는 Variable: 드라이브를 어떻게 돌아다니고, 변수를 만들고, 바꾸고, 지우는지를 하나씩 살펴볼게요.
출처: about_Variable_Provider — Microsoft Learn (PowerShell 7.6, 영어 원문)
본문
공급자 이름
Variable
드라이브
Variable:
기능 (Capabilities)
ShouldProcess
짧은 설명
PowerShell 변수와 그 값에 접근할 수 있게 해 주는 공급자예요.
자세한 설명
PowerShell Variable 공급자는 현재 콘솔에서 PowerShell 변수를 가져오고, 추가하고, 바꾸고, 비우고, 삭제하는 일을 도와줘요.
이 공급자는 PowerShell이 직접 만들어 주는 변수들 — 자동 변수(automatic variables), 기본 설정 변수(preference variables), 그리고 여러분이 직접 만든 변수까지 — 모두 지원해요.
Variable 드라이브는 평평한(flat) 네임스페이스라서 변수 객체만 들어 있어요. 변수에는 하위 항목이 없죠. 그래서 탐색 구조가 단순하다는 점이 크게 와 닿을 거예요.
Variable 공급자는 아래 cmdlet 들을 지원해요. 이번 글에서 함께 다룰 거예요.
사실 PowerShell에는 변수를 보고 바꾸는 데 특화된 cmdlet 묶음도 따로 있어요. 이 변수 전용 cmdlet 들을 쓸 때는 경로 이름에 Variable: 드라이브를 적을 필요가 없어요. 다만 이번 글에서는 Variable 공급자 쪽에 집중하느라, 변수 전용 cmdlet 들은 다루지 않을게요.
참고 — cmdlet 없이도 PowerShell의 식(expression) 구문만으로 변수를 만들고, 보고, 바꿀 수 있어요. 변수를 직접 다룰 때는 이름 앞에 달러 기호(
$)를 붙여서 변수임을 표시하고, 대입 연산자(=)로 값을 정하거나 바꿔요. 예를 들어$p = Get-Process라고 쓰면p변수가 만들어지고Get-Process명령의 결과가 그 안에 저장돼요.
이 공급자가 노출하는 형식 (Types)
변수는 여러 가지 형식이 될 수 있어요. 대부분의 변수는 PSVariable 클래스의 인스턴스예요. 그 외의 특수한 변수와 그 형식은 아래와 같아요.
?변수는QuestionMarkVariable클래스의 인스턴스예요.null변수는NullVariable클래스의 인스턴스예요.- 최대 개수 관련 변수들은
SessionStateCapacityVariable클래스의 인스턴스예요. LocalVariable인스턴스는 현재 실행 중인 코드에 대한 정보를 담고 있어요. 예를 들면:MyInvocationPSCommandPathPSScriptRootPSBoundParametersargsinput
Variable 드라이브 탐색하기
Variable 공급자는 데이터 저장소를 Variable: 드라이브로 노출해요. 변수를 다룰 때는 Set-Location Variable:처럼 위치를 이 드라이브로 옮기거나, 다른 PowerShell 드라이브에 그대로 있는 채로 작업할 수도 있어요. 다른 위치에서 특정 변수를 참조하고 싶으면 경로에 드라이브 이름(Variable:)을 붙여주면 돼요.
Set-Location Variable:
다시 파일 시스템 드라이브로 돌아가려면 드라이브 이름을 입력하면 돼요. 예를 들어 이렇게요.
Set-Location C:
물론 다른 PowerShell 드라이브에 그대로 있으면서 Variable 공급자를 쓸 수도 있어요. 그때는 경로에 드라이브 이름 Variable:을 붙여서 참조하면 되죠.
참고 — PowerShell은 공급자 경로를 쉽게 다루도록 별칭(alias)을 제공해요.
dir과ls는 이제 Get-ChildItem의 별칭이고,cd는 Set-Location의 별칭,pwd는 Get-Location의 별칭이에요.
변수의 값 확인하기
현재 세션의 모든 변수 가져오기
아래 명령은 현재 세션에 있는 모든 변수와 그 값을 목록으로 보여줘요. 어느 PowerShell 드라이브에서든 쓸 수 있는 명령이에요.
Get-ChildItem -Path Variable:
공급자 경로로 특정 변수 값 얻기
이 명령은 변수 이름 앞에 달러 기호($)를 붙인 공급자 경로로 값을 가져와요. 사실 변수 이름에 $를 붙이는 것과 똑같은 효과예요.
$Variable:HOME
와일드카드로 변수들 가져오기
이 명령은 이름이 "Max"로 시작하는 변수들을 가져와요. 역시 어느 드라이브에서든 사용할 수 있어요.
Get-ChildItem -Path Variable:Max*
? 변수의 값 가져오기
이 명령은 Get-ChildItem의 -LiteralPath 매개 변수를 사용해서 Variable: 드라이브 안에서 ? 변수의 값을 가져와요. ?는 경로에서 와일드카드로 해석되지만, Get-ChildItem은 -LiteralPath 매개 변수의 값에서는 어떤 와일드카드도 풀려고 하지 않아요.
Get-ChildItem -LiteralPath ?
ReadOnly·Constant 변수 가져오기
이 명령은 Options 속성 값이 ReadOnly 또는 Constant인 변수들을 가져와요.
Get-ChildItem -Path Variable: |
Where-Object {
$_.Options -match 'Constant' -or
$_.Options -match 'ReadOnly'
} |
Format-List -Property Name, Value, Options
변수 만들기
새 변수 생성
이 명령은 services 변수를 만들고 Get-Service 명령의 결과를 그 안에 저장해요. 현재 위치가 Variable: 드라이브 안이기 때문에 -Path 매개 변수의 값이 점(.)이 되는데, 점은 '지금 위치'를 뜻해요.
Get-Service 주변의 괄호는 명령이 변수 생성 전에 먼저 실행되도록 보장해 줘요. 괄호가 없으면 새 변수의 값이 그냥 "Get-Service"라는 문자열이 돼버려요.
New-Item -Path . -Name services -Value (Get-Service)
절대 경로로 변수 만들기
이 명령은 services 변수를 만들고 Get-Service 명령의 결과를 그 안에 저장해요.
New-Item -Path Variable:services -Value Get-Service
값 없는 변수를 만들고 싶다면 대입 연산자를 빼면 돼요.
변수 바꾸기
변수 이름 바꾸기
이 명령은 Rename-Item cmdlet을 써서 a 변수의 이름을 processes로 바꿔요.
Rename-Item -Path Variable:a -NewName processes
변수의 값 바꾸기
이 명령은 Set-Item cmdlet을 써서 ErrorActionPreference 변수의 값을 "Stop"으로 바꿔요.
Set-Item -Path Variable:ErrorActionPreference -Value Stop
변수 복사하기
이 명령은 Copy-Item cmdlet을 써서 processes 변수를 old_processes로 복사해요. 그러면 processes 변수와 값이 같은 새 변수 old_processes가 생겨요.
Copy-Item -Path Variable:processes -Destination Variable:old_processes
변수 삭제하기
이 명령은 현재 세션에서 serv 변수를 삭제해요. 어느 PowerShell 드라이브에서든 쓸 수 있어요.
Remove-Variable -Path Variable:serv
-Force 매개 변수로 변수들 삭제하기
이 명령은 Options 속성 값이 Constant인 변수를 제외한, 현재 세션의 모든 변수를 삭제해요. -Force 매개 변수가 없으면 Options 값이 ReadOnly인 변수는 삭제하지 않아요.
Remove-Item Variable:* -Force
변수 값을 null로 설정하기
이 명령은 Clear-Item cmdlet을 써서 processes 변수의 값을 NULL로 바꿔요.
Clear-Item -Path Variable:processes
파이프라인 사용하기
공급자 cmdlet 들은 파이프라인 입력을 받아들여요. 파이프라인을 쓰면 한 공급자 cmdlet의 데이터를 다음 공급자 cmdlet으로 넘겨서 작업을 간단히 만들 수 있어요. 공급자 cmdlet과 파이프라인을 함께 쓰는 방법이 더 궁금하다면, 이 글 곳곳에 걸려 있는 각 cmdlet 참조 문서를 보면 돼요.
도움말 얻기
Windows PowerShell 3.0부터는 공급자 cmdlet에 대해, 해당 cmdlet이 파일 시스템 드라이브에서 어떻게 동작하는지를 설명하는 맞춤형 도움말 항목을 얻을 수 있어요.
파일 시스템 드라이브에 맞춰진 도움말 항목을 보려면 파일 시스템 드라이브에서 Get-Help 명령을 실행하거나, Get-Help의 -Path 매개 변수로 파일 시스템 드라이브를 지정하면 돼요.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path Variable:
더 알아보기
원문 최종 업데이트: 2025-09-29 · PowerShell-Docs 저장소 (about_Variable_Provider.md)