PowerShell 변수 사용 방법
Aug 26, 2025
PowerShell 변수는 스크립트나 세션에서 생성, 수정, 사용될 수 있는 데이터를 담는 컨테이너 역할을 합니다. 이러한 변수는 문자열, 정수, 배열, 해시테이블을 포함한 여러 데이터 유형을 지원하며, 로컬, 전역 또는 스크립트 기반 범위로 지정할 수 있습니다. 관리자는 설명, 가시성, 옵션을 설정하고, 변수를 나열하거나 삭제(클리어)하며, 해당 내용을 내보낼 수 있습니다. 변수를 적절히 사용하면 자동화와 스크립팅 효율성이 간편해집니다.
소개
PowerShell의 변수는 값이 할당되는 컨테이너입니다. . 보관합니다. 변수를 나중에 사용하기 위해 정보를 담아둘 수 있는 이름이 붙은 상자라고 생각해 보세요. 변수의 값은 변수를 참조하기만 하면 쉽게 액세스할 수 있으며, 언제든지 변수에 새 값을 다시 할당해 변경할 수 있습니다. 변수는 스크립트나 PowerShell 세션 중에 데이터를 추적하는 데 매우 유용합니다.
PowerShell 변수 예제
이제 PowerShell에서 변수를 사용하는 가장 유용한 방법 몇 가지를 살펴보겠습니다.
PowerShell에서 변수 만들고 설정하기
PowerShell의 변수 이름은 달러 기호($)로 시작하며 대소문자를 구분하지 않습니다. 예를 들어 $VAR 와 $var 는 동일한 변수를 가리킵니다. 변수 이름에는 문자, 숫자, 밑줄(_)을 포함할 수 있습니다. 공백과 다른 특수 문자를 포함할 수도 있지만, 가급적 사용하지 않는 것이 좋습니다.
PowerShell에서 변수의 이름을 선택했다면, 한 번의 명령으로 변수를 만들고 값을 할당할 수 있습니다. 예를 들어, 변수 이름이 $Greeting 인 변수를 만들고 문자열 값 Hello, World 를 할당하려면 다음 명령을 사용합니다:
$Greeting = "Hello, World"
이 명령을 실행한 뒤에는 $Greeting 를 입력할 때마다 PowerShell이 해당 변수에 할당했던 값을 아래와 같이 대신해서 사용합니다.
앞의 예에서 사용된 이중 따옴표(“ ”)는 값이 문자열임을 나타냅니다. 다음은 변수를 만들고 정수 값을 할당하는 방법입니다:
$var1 = 75
$var2 = 25
여기에 표시된 것처럼 숫자 변수로 산술 연산을 수행할 수 있습니다:
더하기 기호(+) 연산자를 사용해 문자열을 결합할 수도 있습니다:
$var10 = “Complete”
$var11 = “Visibility
$var12 = $var10 + $var11
문자열에 숫자를 더하면, 그 숫자는 자동으로 문자열이 됩니다:
$var1 = “Netwrix”
$var2 = 2023
변수의 유형을 설정하거나 확인하기
PowerShell의 변수는 문자열, 정수 등 여러 데이터 유형과 배열 같은 더 복잡한 객체를 저장할 수 있습니다. 변수에 값을 할당하면 PowerShell이 해당 값에 따라 데이터 유형을 자동으로 결정합니다. 이를 동적 타이핑(dynamic typing)이라고 합니다. 위에서 언급했듯이 문자열에는 따옴표가 필요합니다.
몇 가지 예시는 다음과 같습니다:
$var1 = "Hello" # The type of $var1 is String
$var2 = 25 # The type of $var2 is Integer
$var3 = Get-Date # The type of $var3 is DateTime
변수의 유형을 알아내려면 GetType 매개변수를 사용합니다:
$var5 = “Netwrix”
$var5.GetType () .FullName
가장 일반적인 변수 유형은 다음과 같습니다.
- String: 텍스트(따옴표로 텍스트를 묶어 문자열을 선언할 수 있습니다)
- Integer: 정수
- Double: 소수점이 포함된 숫자
- Boolean: 참/거짓 값($True 또는 $False)
- DateTime: 날짜와 시간
- Array: 동일하거나 서로 다른 유형의 항목들을 모아 보관하는 데이터 구조입니다. 항목은 순차적으로 저장되며 인덱스로 접근할 수 있습니다. 다음은 배열을 선언하는 예시입니다:
$myArray = "apple", "orange", "cherry"
- HashTable: 키-값 쌍의 순서 없는 컬렉션으로 구성된 데이터 구조입니다. 고유한 키를 사용해 각 값을 저장하고 검색하는 사전(딕셔너리)과 비슷합니다. 해시 테이블은 조회(검색)가 빠르고, 값을 쉽게 찾아야 하는 상황에 특히 적합합니다. 해시 테이블을 만들려면 다음을 사용합니다 @{} . 중괄호 안에서는 각 쌍을 키에 등호(=)를 붙인 다음 값을 지정하며, 아래 예시처럼 작성합니다:
$myHashtable = @{
"Fruit1" = "Apple"
"Fruit2" = "Orange"
"Fruit3" = "Cherry"
}
변수의 범위(스코프) 정의하기
범위(스코프)는 변수의 가시성과 접근 가능성을 의미합니다. PowerShell에는 여러 가지 서로 다른 범위가 있습니다:
- 로컬 — 현재 범위
- 글로벌 — PowerShell이 시작되거나 새 세션 또는 실행 공간(runspace)을 만들 때 적용되는 범위
- 스크립트 — 스크립트가 실행되는 동안 생성되는 범위
변수는 PowerShell에서 다음과 같이 지정합니다:
$global:Var1 = "Global Variable"
$script:Var2 = "Script Variable"
$local:Var3 = "Local Variable"
Netwrix Directory Manager로 작업을 자동화
복잡한 PowerShell 스크립트 없이 그룹 관리를 간소화하고 작업을 자동화하세요.
공개 변수 vs. 비공개 변수
변수의 Visibility 속성은 범위(scope)와 관련이 있습니다. 이는 해당 변수가 생성된 스크립트 외부에서 항목을 볼 수 있는지를 결정합니다. 변수의 Visibility 속성은 Public 또는 Private 값을 가질 수 있습니다. 비공개(Private) 변수는 생성된 범위에서만 볼 수 있고 변경할 수 있습니다. 공개(Public) 변수는 어떤 범위에서든 접근할 수 있습니다.
현재 범위의 변수 나열(가져오기)
PowerShell 세션에서 현재 사용 중인 모든 변수를 Get-Variable cmdlet을 사용해 나열할 수 있습니다. 이 cmdlet은 현재 범위의 모든 변수를 가져옵니다. 아래 예시는 이전 예제에서 사용된 변수 중 일부를 나열합니다.
변수 출력하기
변수를 .txt, .csv 또는 HTML 파일로 출력할 수 있습니다.
.txt 파일에 쓰려면 Out-File 명령을 사용하세요:
$var5 = “Hello World”
$var5 | Out-File c:scriptsHello_World.txt
데이터를 .csv 파일로 내보내려면 Export-Csv 명령을 사용하세요:
$var6 = Get-Process
$var6 | SELECT Name, Path | Export-Csv -Path c:scriptsprocesses.csv
HTML 파일에 쓰려면 ConvertTo-Html 명령을 사용하세요:
$var6 = Get-Process
$var6 | ConvertTo-HTML -Property Name, Path>C:scriptprocesses.html
내보낸 파일을 읽으려면 Get-Content cmdlet을 사용하세요:
Get-Content c:\scripts\processes.csv
변수 지우기
Clear-Variable cmdlet은 변수에서 값을 제거하지만, 변수 개체 자체는 그대로 둡니다. 변수가 지워지면 변수는 여전히 존재하지만 값은 $null 입니다. 아래 예에서는 변수를 만든 다음 지우며, 각 작업이 확인됩니다.
변수 제거
Remove-Variable cmdlet은 변수를 삭제하고 그 값도 함께 삭제하는 데 사용됩니다.
아래 예에서는 Example 라는 변수가 생성되고 문자열 “Hello World!”이 할당됩니다. 그런 다음 변수는 Remove-Variable cmdlet으로 삭제됩니다. 그 후 스크립트가 변수를 확인하고 더 이상 존재하지 않기 때문에 오류를 반환합니다.
다음 사항에 유의하세요. Remove-Variable cmdlet은 현재 범위(scope)에 있는 변수만 제거합니다. 상위 범위(parent scope)에 동일한 이름의 변수가 있다면, 해당 변수는 영향을 받지 않습니다. 마찬가지로 Remove-Variable 는 동일한 이름의 변수를 포함할 수 있는 하위 범위(child scope)에 아무 영향도 주지 않습니다.
Clear-Variable 와 Remove-Variable 명령의 차이는 변수를 지울 때는 변수의 값만 삭제되는 반면, 변수를 제거하면 변수 자체가 삭제된다는 점입니다.
매개 변수
위에서 설명한 cmdlet은 다양한 매개 변수를 사용합니다. 가장 유용한 매개 변수가 무엇인지, 그리고 각각이 어떻게 동작하는지 살펴보겠습니다.
설명
PowerShell 변수에는 Description 속성이 있으며, Set-Variable cmdlet을 사용해 Description 매개 변수를 지정하여 설정할 수 있습니다:
Set-Variable -Name "myVariable" -Description "This is my sample variable"
제외
Get-Variable cmdlet을 사용할 때 특정 변수를 제외하려면 Exclude 매개 변수를 사용하고 제외할 변수 이름을 지정합니다. 아래 예에서는 4개의 변수를 만듭니다. 그런 다음 Get-Variable -Exclude 명령을 사용해 그중 2개를 제외했습니다.
$Var1 = "Test1"
$Var2 = "Test2"
$Var3 = "Test3"
$OtherVar = "Other"
Get-Variable -Exclude Var1, OtherVar
(특정 변수만 포함하려면 아래에 설명된 대로 Name 매개 변수를 사용합니다.)
강제
일부 명령에서는 Force 매개변수를 사용할 수 있습니다. 예를 들어 Set-Variable 및 Remove-Variable 과 같이 사용하면, 명령이 완료되지 못하게 할 수 있는 모든 제한을 무시할 수 있습니다.
예를 들어, 읽기 전용 변수의 값을 변경하려는 시도는 보통 아래와 같이 오류가 발생합니다.
하지만 Force 매개변수로 이 동작을 재정의할 수 있습니다:
이름
달러 기호 없이 변수의 이름으로 변수를 참조하려면 Name 매개변수를 사용할 수 있습니다. 특히, 특정 패턴과 일치하는 이름을 가진 변수만 가져오도록 사용할 수 있습니다. 예를 들어, 아래 cmdlet을 사용하면 이름이 “Net”으로 시작하는 변수만 검색할 수 있습니다:
Get-Variable -Name "NET*"
별표(*)는 와일드카드 문자로, 임의의 추가 문자 개수를 의미합니다.
옵션
Option 매개변수는 Set-Variable cmdlet으로 지정할 수 있습니다. 이 매개변수에 대해 사용할 수 있는 값은 다음과 같습니다:
- 없음 (기본값): 변수는 일반 변수처럼 동작합니다.
- ReadOnly: 변수는 변경하거나 삭제할 수 없습니다.
- Constant: 변수를 변경하거나 삭제할 수 없습니다. Force 매개 변수를 사용해도 마찬가지입니다.
- Private: 변수는 현재 스코프에서만 사용할 수 있습니다.
- AllScope: 변수가 새로 생성되는 모든 스코프로 복사됩니다.
ReadOnly 옵션의 예시가 여기에 표시됩니다:
PassThru
기본적으로 작업을 수행하는 대부분의 cmdlet(예: Set-Variable, New-Item 및 Remove-Item)는 아무 것도 출력하지 않으며, 그저 작업을 조용히 완료합니다. 하지만 PassThru 매개변수를 사용하면 cmdlet이 해당 cmdlet로 조작한 항목을 나타내는 개체를 출력합니다.
다음은 PassThru 를 Set-Variable 과 함께 사용하는 예입니다:
WhatIf
다음을 포함해 변경을 수행하는 WhatIf 매개변수 cmdlet을 사용할 수 있습니다. 예: Set-Variable, Remove-Variable 또는 Clear-Variable 를 사용하면 cmdlet을 실행했을 때 어떤 일이 일어날지(실제 변경 없이) 확인할 수 있습니다. 이는 cmdlet이 무엇을 수행할지 확신이 없을 때 유용합니다. 아래에 예시가 나와 있습니다:
결론
PowerShell 변수가 어떻게 생성되고 조작될 수 있는지에 대해 탄탄한 이해가 있다면, 작업 자동화, 시스템 관리, 소프트웨어 개발 등 다양한 업무를 지원하는 PowerShell 스크립트를 만들 수 있습니다.
Netwrix가 도와드릴 수 있는 방법
Active Directory 및 Entra ID (Azure AD) 환경을 더 효율적이고 효과적으로 보안하고 싶으신가요? Netwrix Directory Manager를 고려해 보세요. 자동화된 그룹 및 사용자 관리 기능은 data breach 위험을 줄이는 동시에 시간 낭비가 큰 수동 관리 작업을 제거해 줍니다.es while eliminating time-wasting manual administrative tasks.
Netwrix Directory Manager 는 다음을 가능하게 해줍니다:
- HR 정보 시스템(HRIS)에서 Active Directory, Entra ID 및 SCIM 지원 애플리케이션으로 사용자 프로비저닝과 프로비저닝 해제를 자동화하여, 신규 직원이 빠르게 생산성을 확보하도록 지원하는 동시에 오래된(유효하지 않은) 계정을 악용해 침입자가 권한을 탈취할 위험을 줄여줍니다.
- HRIS에 기록된 직원의 승진이나 다른 역할로의 전환 같은 변경 사항을 기반으로 디렉터리 그룹을 자동으로 업데이트하세요. 이 자동화는 보안 및 컴플라이언스 요구에 따라 접근 권한을 거의 실시간으로 최신 상태로 유지하는 동시에, IT 팀의 시간을 절약해 줍니다.
- 누가 무엇에 접근해야 하는지 아는 사람들에게 그룹 및 사용자 관리를 위임하세요. 간단한 워크플로우를 통해 부서(사업부) 담당자들이 자신의 그룹을 검토하고 사용자 액세스 요청을 승인 또는 거부할 수 있으므로, 디렉터리에 과도한 권한을 가진 그룹과 사용자가 생길 위험을 줄일 수 있습니다.
- 자동 사용자 생성, 만료 및 삭제를 통해 디렉터리를 깔끔하게 유지하고 관리하기 쉽게 만드세요.
- 심층적인 인사이트, 효과적인 자동화, 그리고 그룹과 멤버에 대한 명확한 보고를 통해 규정 및 표준을 유지하고 컴플라이언스를 입증하세요.
초보자를 위한 Windows PowerShell 스크립팅 튜토리얼
자세히 알아보기공유하기
더 알아보기
저자 소개
Jonathan Blackwell
소프트웨어 개발 책임자
2012년부터 엔지니어이자 혁신가인 Jonathan Blackwell은 엔지니어링 리더십을 제공해 Netwrix GroupID를 Active Directory 및 Azure AD 환경에서 그룹 및 사용자 관리 분야의 최전선에 올려놓았습니다. 개발, 마케팅, 영업에서의 그의 경험을 통해 Jonathan은 Identity 시장과 구매자가 생각하는 방식까지 완전히 이해할 수 있습니다.