about_Environment_Variables

간단한 설명

PowerShell에서 환경 변수에 액세스하고 관리하는 방법을 설명합니다.

환경 변수는 운영 체제 및 기타 프로그램에서 사용하는 데이터를 저장합니다. PowerShell은 다음과 같은 환경 변수를 만듭니다.

  • POWERSHELL_TELEMETRY_OPTOUT
  • POWERSHELL_DISTRIBUTION_CHANNEL
  • POWERSHELL_UPDATECHECK
  • PSExecutionPolicyPreference
  • PSModulePath
  • PSModuleAnalysisCachePath
  • PSDisableModuleAnalysisCacheCleanup

이러한 변수에 대한 전체 설명은 이 문서의 PowerShell 환경 변수를 참조 하세요 .

자세한 설명

PowerShell은 지원되는 운영 체제 플랫폼에서 환경 변수에 액세스하고 관리할 수 있습니다. PowerShell 환경 공급자를 사용하면 현재 콘솔에서 환경 변수를 가져오기, 추가, 변경, 지우고 삭제할 수 있습니다.

참고 항목

Windows와 달리 macOS 및 Linux의 환경 변수 이름은 대/소문자를 구분합니다. 예를 들어 비 $env:Path$env:PATH Windows 플랫폼의 환경 변수는 서로 다릅니다.

PowerShell의 다른 변수 형식과 달리 환경 변수는 항상 문자열로 저장됩니다. 또한 다른 변수와 달리 로컬 백그라운드 작업 및 모듈 멤버가 실행되는 세션과 같은 자식 프로세스에서 상속됩니다. 따라서 환경 변수는 부모 프로세스와 자식 프로세스 모두에 필요한 값을 저장하는 데 적합합니다.

Windows에서 환경 변수는 다음 세 가지 범위로 정의할 수 있습니다.

  • 컴퓨터(또는 시스템) 범위
  • 사용자 범위
  • 프로세스 범위

프로세스 범위에는 현재 프로세스 또는 PowerShell 세션에서 사용할 수 있는 환경 변수가 포함됩니다. 이 변수 목록은 부모 프로세스에서 상속되며 컴퓨터사용자 범위의 변수에서 생성됩니다.

PowerShell에서 환경 변수를 변경하면 변경 내용이 현재 세션에만 영향을 줍니다. 이 동작은 Windows 명령 셸의 set 명령 동작과 UNIX 기반 환경의 setenv 명령과 유사합니다. 컴퓨터 또는 사용자 범위의 값을 변경하려면 System.Environment 클래스의 메서드를 사용해야 합니다.

컴퓨터 범위 변수를 변경하려면 권한도 있어야 합니다. 충분한 권한 없이 값을 변경하려고 하면 명령이 실패하고 PowerShell에서 오류가 표시됩니다.

PowerShell은 환경 변수를 사용하고 관리하기 위한 여러 가지 방법을 제공합니다.

  • 변수 구문
  • 환경 공급자 및 항목 cmdlet
  • .NET System.Environment 클래스

변수 구문 사용

다음 구문을 사용하여 환경 변수의 값을 표시하고 변경할 수 있습니다.

$Env:<variable-name>

예를 들어 환경 변수의 값을 표시하려면 다음을 수행 WINDIR 합니다.

$Env:windir
C:\Windows

이 구문에서 달러 기호($)는 변수를 나타내고 드라이브 이름(Env:)은 환경 변수 뒤에 변수 이름(windir)을 나타냅니다.

다음 구문을 사용하여 환경 변수의 값을 만들고 업데이트할 수 있습니다.

$Env:<variable-name> = "<new-value>"

예를 들어 환경 변수를 만들려면 다음을 수행 Foo 합니다.

$Env:Foo = 'An example'

환경 변수는 항상 문자열이므로 문자열을 포함하는 다른 변수처럼 사용할 수 있습니다. 예시:

"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example

An example!

PowerShell에서는 환경 변수를 빈 문자열로 설정할 수 없습니다. 환경 변수를 빈 문자열로 $null 설정하면 현재 세션에서 제거됩니다. 예시:

$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+            ~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand

Get-Member 는 환경 변수가 제거되었기 때문에 오류를 반환했습니다. 빈 문자열에서 사용할 때 오류가 반환되지 않음을 확인할 수 있습니다.

'' | Get-Member -MemberType Properties
   TypeName: System.String

Name   MemberType Definition
----   ---------- ----------
Length Property   int Length {get;}

PowerShell의 변수에 대한 자세한 내용은 about_Variables 참조하세요.

환경 공급자 및 항목 cmdlet 사용

PowerShell의 환경 공급자는 파일 시스템 드라이브와 유사한 형식으로 환경 변수와 상호 작용하기 위한 인터페이스를 제공합니다. PowerShell에서 환경 변수 및 값을 가져오기, 추가, 변경, 지우고 삭제할 수 있습니다.

예를 들어 값Bar이 다음인 Foo 환경 변수를 만들려면

New-Item -Path Env:\Foo -Value 'Bar'
Name                           Value
----                           -----
Foo                            Bar

환경 변수를 복사하고Copy-Item, 환경 변수 값을 사용하여 설정하고, 환경 변수Set-Item를 나열하고, 환경 변수Get-ItemRemove-Item를 삭제할 수도 있습니다.

Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name                           Value
----                           -----
Foo2                           Bar

Name                           Value
----                           -----
Foo2                           BAR
Foo                            Bar

VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".

cmdlet을 Get-ChildItem 사용하여 환경 변수의 전체 목록을 확인합니다.

Get-ChildItem Env:

환경 공급자를 사용하여 환경 변수를 관리하는 방법에 대한 자세한 내용은 about_Environment_Provider 참조하세요.

System.Environment 메서드 사용

System.Environment 클래스는 환경 변수를 SetEnvironmentVariable()GetEnvironmentVariable() 가져와 수정하는 메서드와 메서드를 제공합니다.

다음 예제에서는 값이 있는 새 환경 변수 Foo를 만든 다음 해당 값을 Bar 반환합니다.

[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar

변수 값에 빈 문자열을 SetEnvironmentVariable() 지정하여 메서드를 사용하여 환경 변수를 제거할 수 있습니다. 예를 들어 환경 변수를 제거하려면 다음을 수행 Foo 합니다.

[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')

System.Environment 클래스의 메서드에 대한 자세한 내용은 환경 메서드를 참조하세요.

Windows에서 영구 환경 변수 만들기

Windows에서는 환경 변수를 영구적으로 변경하는 세 가지 방법이 있습니다.

  • 프로필에 설정
  • SetEnvironmentVariable() 메서드 사용
  • 시스템 제어판 사용

프로필에서 환경 변수 설정

PowerShell 프로필에서 추가하거나 변경하는 모든 환경 변수는 프로필을 로드하는 모든 세션에서 사용할 수 있습니다. 이 메서드는 지원되는 모든 플랫폼에서 PowerShell의 모든 버전에서 작동합니다.

예를 들어 환경 변수를 CompanyUri 만들고 폴더를 포함하도록 환경 변수를 C:\Tools 업데이트 Path 하려면 PowerShell 프로필에 다음 줄을 추가합니다.

$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'

참고 항목

Linux 또는 macOS에서 콜론(:)은 세미콜론(;) 대신 목록의 앞에 있는 경로와 새 경로를 구분하는 데 사용됩니다.

자동 변수를 사용하여 PowerShell 프로필의 $PROFILE 경로를 가져올 수 있습니다. 프로필에 대한 자세한 내용은 about_Profiles 참조하세요.

SetEnvironmentVariable()을 사용하여 환경 변수 설정

Windows에서 메서드의 SetEnvironmentVariable() 범위를 세 번째 매개 변수로 지정하여 해당 범위에서 환경 변수를 설정할 수 있습니다. 컴퓨터와 사용자 범위는 모두 현재 프로세스 외부에서 유지되므로 새 환경 변수 또는 변경된 환경 변수를 저장할 수 있습니다.

예를 들어 값Bar이 있는 새 환경 변수 Foo 를 컴퓨터 범위에 저장하려면 다음을 수행합니다.

[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')

변수의 값을 빈 문자열로 설정하여 사용자 또는 컴퓨터 범위에서 환경 변수를 삭제할 수 있습니다.

[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')

시스템 제어판 환경 변수 설정

시스템 제어판 사용자시스템(컴퓨터) 범위에서 기존 환경 변수를 추가하거나 편집할 수 있습니다. Windows는 이러한 값을 레지스트리에 기록하여 세션 및 시스템 다시 시작 간에 유지합니다.

System 제어판 사용하여 Windows에서 환경 변수를 영구적으로 변경하려면 다음을 수행합니다.

  1. 시스템 제어판 엽니다.
  2. 시스템을 선택합니다.
  3. 고급 시스템 설정 선택합니다.
  4. 고급 탭으로 이동합니다.
  5. 환경 변수를 선택합니다...
  6. 필요한 사항을 변경합니다.

비 Windows 플랫폼에서 영구 환경 변수 만들기

Linux 및 macOS에는 애플리케이션을 시작하기 전에 운영 체제에서 환경 변수를 설정하는 데 사용하는 구성 파일 및 스크립트가 있습니다.

PowerShell을 기본(로그인) 셸로 실행하는 경우 운영 체제에서 지원하는 전역 초기화 파일에서 환경 변수를 정의할 수 있습니다. 예를 들어 Linux에서 환경 변수를 /etc/environment 파일에 추가하거나 환경 변수를 설정하고 폴더에 배치하는 스크립트를 /etc/profile.d 만들 수 있습니다. macOS에서 파일에 환경 변수를 /etc/profile 추가할 수 있습니다.

다른 셸에서 PowerShell을 시작할 때 비 로그인 셸에서 사용되는 셸별 초기화 파일(예: ~/.bashrc for 또는 ~/.zshrc forzsh)에서 환경 변수를 bash 정의할 수 있습니다.

자세한 내용은 운영 체제 및 기본 셸에 대한 설명서를 참조하세요.

PowerShell 환경 변수

PowerShell 기능은 환경 변수를 사용하여 사용자 기본 설정을 저장할 수 있습니다. 이러한 변수는 기본 설정 변수처럼 작동하지만 생성되는 세션의 자식 세션에서 상속됩니다. 기본 설정 변수에 대한 자세한 내용은 about_Preference_Variables 참조하세요.

기본 설정을 저장하는 환경 변수는 다음과 같습니다.

  • POWERSHELL_TELEMETRY_OPTOUT

    원격 분석을 옵트아웃하려면 환경 변수를 < yesa0/> 또는 1.true로 설정합니다. 자세한 내용은 about_Telemetry 참조하세요.

    이 환경 변수가 적용되려면 PowerShell 프로세스를 시작하기 전에 설정해야 합니다. 영구 환경 변수를 만드는 방법에 대한 자세한 내용은 이전 섹션을 참조하세요.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    PowerShell 7.2부터 이 환경 변수는 설치 관리자 패키지에 의해 설정되어 PowerShell에 대한 설치 방법 및 원본을 기록합니다.

    이 정보는 Microsoft로 전송된 원격 분석 데이터에 포함됩니다. 사용자는 이 값을 변경해서는 안 됩니다.

  • POWERSHELL_UPDATECHECK

    업데이트 알림 동작은 환경 변수를 POWERSHELL_UPDATECHECK 사용하여 변경할 수 있습니다. 자세한 내용은 about_Update_Notifications 참조하세요.

    지원되는 값은 다음과 같습니다.

    • Off 업데이트 알림 기능을 해제합니다.
    • Default는 다음을 정의하지 않는 것과 같습니다.POWERSHELL_UPDATECHECK
      • GA 릴리스는 GA 릴리스에 대한 업데이트 알림을 제공합니다.
      • 미리 보기/RC 릴리스는 GA 및 미리 보기 릴리스에 대한 업데이트를 알립니다.
    • LTS LTS(장기 서비스) GA 릴리스에 대한 업데이트만 알릴 뿐입니다.

    PowerShell 프로세스를 시작하기 전에 환경 변수의 기본값이 아닌 값을 설정해야 합니다. 영구 환경 변수를 만드는 방법에 대한 자세한 내용은 이전 섹션을 참조하세요.

  • PSExecutionPolicyPreference

    현재 세션에 대한 실행 정책 집합을 저장합니다. 이 환경 변수는 단일 세션에 대한 실행 정책을 설정하는 경우에만 존재합니다. 두 가지 방법으로 이 작업을 수행할 수 있습니다.

    • ExecutionPolicy 매개 변수를 사용하여 명령줄에서 세션을 시작하여 세션에 대한 실행 정책을 설정합니다.

    • Set-ExecutionPolicy cmdlet을 사용합니다. 값이 있는 Scope 매개 변수를 Process사용합니다.

    • 환경 변수를 수동으로 설정합니다. 이 변수의 값을 변경하면 현재 프로세스의 실행 정책이 변경됩니다.

    이 정보는 Windows 플랫폼에만 적용됩니다. 자세한 내용은 about_Execution_Policies를 참조하세요.

  • PSModulePath

    환경 변수에는 $env:PSModulePath 모듈 및 리소스를 찾기 위해 검색되는 폴더 위치 목록이 포함됩니다. Windows에서 폴더 위치 목록은 세미콜론(;) 문자로 구분됩니다. 비 Windows 플랫폼에서 콜론(:)은 환경 변수의 폴더 위치를 구분합니다.

    기본적으로 할당된 $env:PSModulePath 유효 위치는 다음과 같습니다.

    • 시스템 전체 위치: 이러한 폴더에는 PowerShell과 함께 제공되는 모듈이 포함되어 있습니다. 모듈은 위치에 저장 $PSHOME\Modules 됩니다. 또한 Windows 관리 모듈이 설치된 위치입니다.

    • 사용자가 설치한 모듈: 사용자가 설치한 모듈입니다. Install-Module 에는 현재 사용자 또는 모든 사용자에 대해 모듈이 설치되어 있는지 여부를 지정할 수 있는 Scope 매개 변수가 있습니다. 자세한 내용은 모듈 설치를 참조하세요.

      • Windows에서 사용자별 CurrentUser 범위의 위치는 폴더입니다 $HOME\Documents\PowerShell\Modules . AllUsers 범위의 위치는 $env:ProgramFiles\PowerShell\Modules.
      • 비 Windows 시스템에서 사용자별 CurrentUser 범위의 위치는 폴더입니다 $HOME/.local/share/powershell/Modules . AllUsers 범위의 위치는 /usr/local/share/powershell/Modules.

    또한 Program Files 디렉터리 같은 다른 디렉터리에 모듈을 설치하는 설치 프로그램은 해당 위치를 값 $env:PSModulePath에 추가할 수 있습니다.

    자세한 내용은 about_PSModulePath 참조하세요.

  • PSModuleAnalysisCachePath

    PowerShell은 모듈 및 해당 cmdlet에 대한 데이터를 캐시하는 데 사용되는 파일을 제어합니다. 캐시는 시작 시 명령을 검색하는 동안 읽혀지고 모듈을 가져온 후에 백그라운드 스레드에 기록됩니다.

    캐시의 기본 위치는 다음과 같습니다.

    • Windows PowerShell 5.1: $env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 이상: $env:LOCALAPPDATA\Microsoft\PowerShell
    • 비 Windows 기본값: ~/.cache/powershell

    캐시의 기본 파일 이름은 .입니다 ModuleAnalysisCache. PowerShell 인스턴스가 여러 개 설치되어 있는 경우 파일 이름에는 설치당 고유한 파일 이름이 있도록 16진수 접미사가 포함됩니다.

    참고 항목

    명령 검색이 제대로 작동하지 않는 경우(예: IntelliSense가 존재하지 않는 명령을 표시함) 캐시 파일을 삭제할 수 있습니다. 다음에 PowerShell을 시작할 때 캐시가 다시 만들어집니다.

    캐시의 기본 위치를 변경하려면 PowerShell을 시작하기 전에 환경 변수를 설정합니다. 이 값은 PowerShell에서 파일을 만들고 쓸 수 있는 권한이 있는 전체 경로(파일 이름 포함)의 이름을 지정해야 합니다.

    이 환경 변수의 변경 내용은 자식 프로세스에만 영향을 줍니다. 영구 환경 변수를 만드는 방법에 대한 자세한 내용은 이전 섹션을 참조하세요.

    파일 캐시를 사용하지 않도록 설정하려면 이 값을 잘못된 위치로 설정합니다. 예를 들면 다음과 같습니다.

    # `NUL` here is a special device on Windows that can't be written to,
    # on non-Windows you would use `/dev/null`
    $env:PSModuleAnalysisCachePath = 'NUL'
    

    그러면 NUL 디바이스의 경로가 설정됩니다. PowerShell은 경로에 쓸 수 없지만 오류가 반환되지 않습니다. 추적기를 사용하여 보고된 오류를 볼 수 있습니다.

    Trace-Command -PSHost -Name Modules -Expression {
      Import-Module Microsoft.PowerShell.Management -Force
    }
    
  • PSDisableModuleAnalysisCacheCleanup

    모듈 분석 캐시를 작성할 때 PowerShell은 불필요하게 큰 캐시를 방지하기 위해 더 이상 존재하지 않는 모듈에 대한 검사. 이러한 검사 바람직하지 않은 경우가 있습니다. 이 경우 이 환경 변수 값을 으로 설정하여 해제할 1수 있습니다.

    이 환경 변수 설정은 현재 프로세스의 후속 클린up 이벤트에 적용됩니다. 시작 시 클린up을 사용하지 않도록 설정하려면 PowerShell을 시작하기 전에 환경 변수를 설정해야 합니다. 영구 환경 변수를 만드는 방법에 대한 자세한 내용은 이전 섹션을 참조하세요.

PowerShell에서 사용하는 기타 환경 변수

경로 정보

  • PATH

    환경 변수에는 $env:PATH 운영 체제에서 실행 파일을 검색하는 폴더 위치 목록이 포함됩니다. Windows에서 폴더 위치 목록은 세미콜론(;) 문자로 구분됩니다. 비 Windows 플랫폼에서 콜론(:)은 환경 변수의 폴더 위치를 구분합니다.

  • PATHEXT

    $env:PATHEXT 변수에는 Windows에서 실행 파일로 간주하는 파일 확장자 목록이 포함되어 있습니다. 나열된 확장명 중 하나가 있는 스크립트 파일이 PowerShell에서 실행되면 스크립트는 현재 콘솔 또는 터미널 세션에서 실행됩니다. 파일 확장 프로그램이 나열되지 않으면 스크립트가 새 콘솔 세션에서 실행됩니다.

    다른 스크립팅 언어에 대한 스크립트가 현재 콘솔 세션에서 실행되도록 하려면 스크립팅 언어에서 사용하는 파일 확장자를 추가합니다. 예를 들어 현재 콘솔에서 Python 스크립트를 실행하려면 환경 변수에 .py 확장을 추가합니다. Windows에서 확장명을 .py 실행 파일로 지원하려면 CMD 명령 셸의 명령 및 assoc 명령을 사용하여 ftype 파일 확장명을 등록해야 합니다. PowerShell에는 파일 처리기를 등록하는 직접 메서드가 없습니다. 자세한 내용은 ftype 명령에 대한 설명서를 참조하세요.

    PowerShell 스크립트는 항상 현재 콘솔 세션에서 시작됩니다. 확장을 추가할 .PS1 필요가 없습니다.

  • XDG 변수

    Windows가 아닌 플랫폼에서 PowerShell은 XDG 기본 디렉터리 사양에 정의된 대로 다음 XDG 환경 변수를 사용합니다.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

터미널 기능

PowerShell 7.2부터 다음 환경 변수를 사용하여 출력 색을 지정하는 ANSI 이스케이프 시퀀스 같은 가상 터미널 기능을 제어할 수 있습니다. TERM 또는 NO_COLOR 환경 변수를 사용하여 ANSI 이스케이프 시퀀스에 대한 지원을 해제할 수 있습니다.

  • 용어

    다음과 같이 동작을 변경하는 값 $env:TERM 은 다음과 같습니다.

    • dumb -설정 $Host.UI.SupportsVirtualTerminal = $false
    • xterm-mono -설정 $PSStyle.OutputRendering = PlainText
    • xtermm -설정 $PSStyle.OutputRendering = PlainText
  • NO_COLOR

    있는 $PSStyle.OutputRendering 경우 $env:NO_COLOR PlainText설정됩니다. NO_COLOR 환경 변수에 대한 자세한 내용은 다음을 참조하세요https://no-color.org/.

참고 항목