본문 바로가기
목차
shell

PowerShell의 초기화-profile

by ds31x 2025. 12. 31.
728x90
반응형

PowerShell의 profile이란?

PowerShell의 profile

  • 셸이 시작될 때 자동으로 실행되어
  • 환경 변수, alias, 함수, 초기화 코드 등을 설정하는
  • 시작 스크립트(확장자 .ps1 파일).

PowerShell은 상황에 따라 서로 다른 profile을 사용할 수 있도록
범위(scope)host(PowerShell엔진을 감싸는 인터페이스) 개념을 제공한다.

 

참고로 많은 기본 Windows 설치 환경에서는
ExecutionPolicy가 Restricted로 설정되어 있어
보안을 위해 .ps1 스크립트 실행이 차단되며,
이로 인해 PowerShell profile이 자동 실행되지 않는다는 메시지가 표시될 수 있다.

이 경우,profile들이 제대로 적용되려면,

PowerShell을 관리자 권한으로 실행하고 다음의 명령어를 실행하여 권한을 줘야 함.

 > set-executionpolicy remotesigned

 

일반적으로  RemoteSigned 를 권장함(인터넷에서 받은 스크립트에 서명 필요하고, 로컬의 경우엔 서명 필요 없음).

회사라면 AllSigend 인 경우(모두 스크립트가 실행하려면 서명 필요)가 많으며, 임시 실행이나 자동화에선 Bypass (보안검사 없이 전부 실행 허용)을 쓰기도 하나 매우 조심해야 함. 

 

참고로, conda의 초기화 및 hook이 들어간 .ps1이 동작하려면 ExecutionPolicy가 remotesigned 정도는 되어야 함.

2023.06.29 - [개발환경] - [CLI] Power Shell의 Profile 수정 : conda를 위해서


1) 4가지 PowerShell profile

PowerShell은

  • 최대 4개의 profile 파일을 가질 수 있으며,이는
  • 사용자 범위
  • host 범위의 조합으로 결정된다.
구분 의미 변수
All Users + All Hosts 모든 사용자, 모든 host 공통 $PROFILE.AllUsersAllHosts
All Users + Current Host 모든 사용자, 현재 host 전용 $PROFILE.AllUsersCurrentHost
Current User + All Hosts 현재 사용자, 모든 host 공통 $PROFILE.CurrentUserAllHosts
Current User + Current Host 현재 사용자, 현재 host 전용 $PROFILE

 

PowerShell은

  • 시작 시 위 테이블의 순서대로,
  • 실제로 존재하는 파일만 로드함.

로드시 설정이 덮어쓰기가 가능하여 뒤에 있을수록 범위는 좁으나 우선순위가 높음.

환경변수 $PROFILE 에는 Current User + Current Host 에 대한 프로파일이 들어가 있음을 유의할 것.


1-1) profile 파일들 존재 유무 확인하기.

test-path 와 앞서 테이블의 (환경)변수를 이용하면 됨:

> test-path $profile.allusersallhosts
> test-path $profile.alluserscurrenthost
> test-path $profile.currentuserallhosts
> test-path $profile
  • 윈도우즈의 명령어에선 대소문자 구분을 안함.
  • 파일이 존재할 경우 True가 없을 경우 False를 반환.

1-2) profile 파일들의 경로 확인하기

다음은 위의 테이블의 경로를 확인하는 방법임:

> $PROFILE | Select-Object * | Format-List
  • 이 경우, 각 profile의 초기화 .ps1 파일의 path를 출력함.

2) 참고: PowerShell에서의 “host”란?

PowerShell이 구분하는 host는
PowerShell 엔진을 감싸는 인터페이스 프로그램 을 가리킴.
개념적으로는 shell과 terminal의 관계와 비슷하나 터미널 S/W라고 보기엔 좀 차이가 있으니 주의할것.

HOST는
PowerShell 엔진이
상호작용하는 실행 환경(ConsoleHost, ISE 등)을 의미함.

 

대표적인 예는 다음과 같다.

실행 환경 $Host.Name
일반 콘솔 ConsoleHost
PowerShell ISE Windows PowerShell ISE Host

참고1: ISE란?

PowerShell ISE(Integrated Scripting Environment)

  • Windows PowerShell 5.1에 포함된 그래픽 기반 스크립트 편집·실행·디버깅 환경으로,
  • 콘솔보다 편리한 개발 기능을 제공하는 전용 호스트임.

참고2: VS Code, Windows Terminal, powershell.exe 는 다른 host인가?

  • VS Code와 Windows Terminal, powershell.exe에서 실행된 PowerShell은
  • 모두 ConsoleHost로 인식됨.
  • 따라서 이들은 host 기준으로 profile이 분리되지 않음.

2-1) host가 다른 경우

PowerShell을 윈도우의 검색에 입력하면 다음이 보임 (앱 한정시):

 

여기서 ISE 가 붙은 경우는 다른 host가 됨.

  • PowerShell ISE와 콘솔은 서로 다른 host이므로
  • CurrentHost profile 파일이 다름.

참고로, x86은 32비트 환경을 의미함.


2-2) 일반적인 환경에서 host 구분은 의미 없음

일반적인 환경에서 host 구분은 거의 의미가 없다

 

일반적으로 많이 쓰는 환경은 다음과 같다.

  • Windows Terminal
  • VS Code
  • 일반 콘솔

이 경우:

  • 모두 ConsoleHost
  • 따라서 CurrentHost profile은 동일

즉, host 기준으로 profile을 나눌 필요는 거의 없으며,
특수한 경우(ISE, 임베디드 PowerShell)를 제외하면 실질적인 차이는 거의 없다.

 

단, PowerShell 7.x를 설치한 경우엔 host가 달라진다.
(PowerShell 7.x 는 별도로 설치하며 별도로 존재함. 단순 upgrade가 아님)

실행 파일 PowerShell 버전 profile 폴더
powershell.exe Windows PowerShell 5.1 Documents\WindowsPowerShell
pwsh.exe PowerShell 7.x Documents\PowerShell

2023.06.28 - [개발환경] - [Env] PowerShell v7.3.5

 

[Env] PowerShell v7.3.5

잡담wsl을 사용하면서 powershell을 쓸 일이 많이 줄었지만... 그래도 간간히 필요하고, 아예 손을 놔버리면 그나마 익숙치 않은데 더 안 좋아지는 터라...노트북의 powershell을 업데이트했다. 주의할

ds31x.tistory.com


3) Windows PowerShell 5.1 기준 profile 경로

3-1) 공통 profile (All Hosts)

Documents\WindowsPowerShell\profile.ps1
  • 콘솔과 ISE 모두에서 로드됨

3-2) 콘솔 전용 profile (ConsoleHost)

Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
  • 콘솔에서만 로드
  • ISE에서는 로드되지 않음

3-3) ISE 전용 profile (ISE Host)

Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
  • ISE에서만 로드
  • 콘솔에서는 로드되지 않음

4) 참고: Conda와 profile의 관계

conda init powershell은 보통 다음 파일을 수정한다.

  • CurrentUserAllHosts의 profile.ps1
  • C:\Users\<계정명>\OneDrive\Documents\WindowsPowerShell\profile.ps1

이 파일은:

  • 현재 사용자에게서
  • 모든 host에 공통 적용되므로
  • 가장 conda를 사용하기 위한 초기화가 이루어지기 적절한 위치임..

PowerShell 시작 시 이 파일이 로드되면 conda hook이 실행되고, 설정에 따라 (base)가 표시된다.

 

다음의 코드를 powershell에서 실행하면 어느 profile에 설정되었는지 확인 가능함:

Select-String `
  -Path $PROFILE.CurrentUserAllHosts `
  -Pattern '#region\s+conda|shell\.powershell|Invoke-Expression' `
| Select-Object `
  Path, LineNumber, Line

 

 


5) 초보자를 위한 정리된 사용 원칙

  • 공통 설정은 profile.ps1 (CurrentUserAllHosts)
  • host 구분은 ISE 같은 특수한 경우에만 고려
  • 일반 환경에서는 PowerShell 5.1 / 7만 구분
  • PowerShell을 공부할 경우, 가능하면 기본 셸을 PowerShell 7(pwsh) 로 통일 (PowerShell 7.x 는 별도 설치 필요)

2023.06.28 - [개발환경] - [Env] PowerShell v7.3.5

 

[Env] PowerShell v7.3.5

잡담wsl을 사용하면서 powershell을 쓸 일이 많이 줄었지만... 그래도 간간히 필요하고, 아예 손을 놔버리면 그나마 익숙치 않은데 더 안 좋아지는 터라...노트북의 powershell을 업데이트했다. 주의할

ds31x.tistory.com

 

728x90