- Powershell 스크립트 파일인 .ps1 파일은 배치 파일이나 VB script 처럼 더블 클릭으로 실행되지 않는다. 그 이유는 보안적인 이유 때문이다.
- 그래서 실행하려면 Powershell 콘솔, ISE 및 Group Policy를 통하여 실행될 수 있는데, 이것도 ExecutionPolicy에 따라 실행 여부가 결정된다. 기본 설정은 .ps1 파일을 실행하지 않도록 하는 Restricted로 설정되어 있다.
- Get-ExecutionPolicy를 실행하면 현재 상태를 알 수가 있다.
- 그런데 복잡하고 긴 명령어를 Script를 사용하면 편리하기 때문에, 꼭 .ps1 스크립트를 실행하고자 하면 다음과 같이 하면 된다.
– [명령 프롬프트]나 [Powershell 콘솔] 프로그램을 실행한다.
– Powershell.exe -ExecutionPolicy RemoteSigned -File c:\myscripts\getprocess.ps1
- 이렇게 하면 일시적으로 ExecutionPolicy가 RemoteSigned로 되었다가 .ps1 파일을 실행한 후 다시 원래대로 Restricted 모드로 돌아 가게 된다.
- 이 작업은 관리자 뿐 아니라 일반 사용자도 할 수 있다. 정리를 하면 스크립트 실행 정책은 사용자의 편의를 위해서 만들어 둔 것이다. 그러므로 사용자가 원하면 언제든지 이렇게 바꾸어서 사용할 수 있다.
- “Set-ExecutionPolicy RemoteSigned” 명령은 시스템 관리자만 실행하여 원하는 정책을 설정한다. 그렇지만 “powershell.exe -ExecutionPolicy Remotesigned”는 일반 사용자도 내릴 수 있다.
-
좀 더 응용하여, 이것을 Batch 파일로 만들면 훨씬 활용도가 높다. 즉, 배치 파일을 더블 클릭하여 이 작업을 할 수 있게 된다. (C:\myscripts\getprocess.bat)
- @echo off
powershell.exe -ExecutionPolicy Remotesigned -File c:\myscripts\getprocess.ps1
- @echo off
- 그런데 이렇게 하면, 결과가 화면에 나타나지 않는다. 스크립트 결과를 파일로 저장하거나 이메일로 보내거나 프린터로 출력을 하면 괜찮지만, 그냥 화면에 출력하는 결과라면 실행한 사람이 자기 작업이 제대로 수행되었는지 알 수가 없다.
-
그래서 배치 파일을 실행한 후 powershell console 화면을 그대로 남겨두고 싶으면 다음과 같이 -NoExit 매개변수를 배치 파일에 추가하면 된다.
- @echo off
powershell.exe -NoExit -ExecutionPolicy Remotesigned -File c:\myscripts\getprocess.ps1
- @echo off