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 인스턴스는 현재 실행 중인 코드에 대한 정보를 담고 있어요. 예를 들면:
    • MyInvocation
    • PSCommandPath
    • PSScriptRoot
    • PSBoundParameters
    • args
    • input

Variable 드라이브 탐색하기

Variable 공급자는 데이터 저장소를 Variable: 드라이브로 노출해요. 변수를 다룰 때는 Set-Location Variable:처럼 위치를 이 드라이브로 옮기거나, 다른 PowerShell 드라이브에 그대로 있는 채로 작업할 수도 있어요. 다른 위치에서 특정 변수를 참조하고 싶으면 경로에 드라이브 이름(Variable:)을 붙여주면 돼요.

Set-Location Variable:

다시 파일 시스템 드라이브로 돌아가려면 드라이브 이름을 입력하면 돼요. 예를 들어 이렇게요.

Set-Location C:

물론 다른 PowerShell 드라이브에 그대로 있으면서 Variable 공급자를 쓸 수도 있어요. 그때는 경로에 드라이브 이름 Variable:을 붙여서 참조하면 되죠.

참고 — PowerShell은 공급자 경로를 쉽게 다루도록 별칭(alias)을 제공해요. dirls는 이제 Get-ChildItem의 별칭이고, cdSet-Location의 별칭, pwdGet-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)