Search

[Windows] Powershell Profile 사용법

PublishDate
2021/09/16
Category
Windows
Powershell
Tag & Keyword
profile
RunCommand

서론

Windows는 Profile 기능을 지원한다.
Profile은 Powershell을 사용할 때 기본으로 설정될 Config 혹은 변수를 등록해서 사용할 수 있다.
이 말이 무슨 말이냐면 Linux의 /etc/profile.d/ 내부 스크립트가 부팅할 때 자동 실행되듯이 Powershell을 시작할 때 마다 Profile로 설정한 스크립트가 실행된다는 것이다.
또한 Powershell 호스트 프로그램은 호스트별로 프로필을 나눠서 설정할 수 있다.
Powershell Profile에 대해서 간단히 정리하고 실습해보겠다.

Profile 파일 경로

Profile의 적용 범위에 따라서 Profile 파일이 저장되는 위치가 다르다.
Mac과 Linux에서도 Powershell을 사용할 수 있지만, Profile 기능까지 사용할 정도의 시스템에서 굳이 Mac,Linux를 Powershell과 함께 쓸 것 같지는 않다. (Windows만 다루겠다는 뜻 ㅎ,,,)
## Profile 경로 ## 위에서부터 높은 우선순위로 적용됩니다. ## $PSHOME : Powershell이 설치된 디렉터리 ## $Home : 사용자의 홈 디렉터리 모든 사용자, 모든 호스트 : $PSHOME\Profile.ps1 모든 사용자, 현재 호스트 : $PSHOME\Microsoft.PowerShell_profile.ps1 현재 사용자, 모든 호스트 : $Home\Document\WindowsPowerShell\Profile.ps1 현재 사용자, 현재 호스트 : $Home\Document\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 ##VSCode에서 Powershell을 호출해서 사용할 때 모든 사용자, 현재 호스트 : $PSHOME\Microsoft.VSCode_profile.ps1 현재 사용자, 현재 호스트 : $Home\Document\WindowsPowerShell\Microsoft.VSCode_profile.ps1
PowerShell
복사
사용자는 User가 될 것이고, Host는 PC가 된다.
$profile 변수에는 현재 사용자, 현재호스트의 Profile 경로가 지정되어있다.
notepad $profile 명령어로 해당 파일을 열어보면 아직 Profile을 생성하지 않았기 때문에 새 파일을 만들겠냐는 팝업이 뜬다. 즉 Powershell과 함께 $profile 은 정의가 되어있지만 아직 사용중이진 않다는 뜻

Profile 작성 및 적용하기

1. Profile 작성 전의 상태를 살펴보자.
get-date 는 KST 시간을 출력하고, $cloudest 변수는 초기화되지 않았다.
notepad $profile 명령어로 Profile 스크립트를 생성하고 다음과 같이 작성했다.
2.
작성한 Profile을 저장하고 Profile이 적용되었는지 확인해보자.
이어서 두 번 더 $cloudest를 출력해봐도 변경된 것이 없다.
하지만 새로운 Powershell을 실행하면 첫 커맨드라인이 나오기 전에 개인 및 시스템 프로필을 로드하는 데 1579ms가 걸렸습니다.와 같은 메시지가 뜨면서 Profile에 적용한 내용이 정상적으로 반영되는 것을 확인할 수 있다.

AWS Run-Command 에서 Powershell Profile 사용 가능할까?

Profile 기능을 처음 사용하게 된 것은 Windows Task Scheduler로 실행하는 스크립트에 미리 변수 및 설정을 선언해놓고 싶기 때문이였다.
AWS의 EC2로 Windows를 사용중이라면 Task Scheduler보단 서버 외부에서 반복작업을 처리하는게 더 안정적일 것이라고 생각해서 AWS SystemManagere의 RunCommand 기능을 사용해보았다.
그럼 Profile로 지정한 내용이 RunCommand - RunPowershellScript 기능에서도 적용될까?
결론은 '안 된다'였다. 모든호스트, 모든유저부터 시작해서 모든 Profile 경로에 프로필 스크립트를 생성하고 RunCommand 기능을 테스트해봤지만 Profile을 적용할 수 없었다.

테스트한 방법은 다음과 같다.

1.
EC2 Windows Server에서 Powershell profile Setting
2.
Run-command로 profile에서 설정한 변수를 출력하는 명령어 실행
$EC2ID > log.txt 명령어 실행 결과 $EC2ID가 Profile에 정의되어있지만 적용되지 않아서 log.txt 파일은 공백이였다.

결론

Windows OS에서 AD User의 변수 및 셋팅값이 다른경우, Powershell에서 Default로 지정하고 싶은 변수나 셋팅이 있는경우 Profile을 작성하여 개별 셋팅이 가능하다.
Powershell을 실행할 때 마다 Profile 스크립트를 실행하는 개념이기 떄문에 Powershell의 초기 실행속도가 느려질 수 있다.
AWS Run Command 기능과는 연계해서 사용할 수 없었다....
혹시 RunCommand에 Profile 적용에 성공하신 분이 계시면 댓글 부탁드립니다..!