명령 줄에서 PowerShell 스크립트 실행 및 더 많은 방법

만약 PowerShell 스크립팅 언어에 처음이고 PowerShell 스크립트를 실행하는 방법을 배우고 싶다면, 이 블로그 포스트가 딱 맞습니다. 이 블로그는 스크립트를 실행하는 일반적인 방법과 발생할 수 있는 몇 가지 문제에 대한 튜토리얼이 될 것입니다.

전제 조건

이 기사는 로컬 컴퓨터에서 PowerShell을 실행하는 방법에 대한 안내서가 될 것입니다. 따라오고 싶다면, 이 기사를 시작하기 전에 다음 전제 조건이 충족되어 있는지 확인하세요.

  • A Windows 10 computer with Administrator privileges.
  • Windows PowerShell 버전 5 이상. 또한 PowerShell v7을 사용할 수도 있습니다. 이 튜토리얼은 Windows PowerShell에 중점을 둘 것이며, Windows 운영 체제에 이미 내장되어 있습니다.
  • 텍스트 파일 편집기

실행 정책 다루기

이게 Windows PowerShell 스크립트를 실행해보는 첫 시도라면, 흔한 문제에 부딪힐 수 있습니다. PowerShell은 아마도 스크립트를 “이 시스템에서 스크립트 실행이 비활성화되어 있기 때문에 로드할 수 없다”는 오류 메시지를 반환할 것입니다.

PS> .\GetServices.ps1
 File C:\Temp\GetServices.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at
 https:/go.microsoft.com/fwlink/?LinkID=135170.
 At line:1 char:1
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

PowerShell은 실행 정책이 Restricted, Remote Signed 또는 All Signed로 설정된 경우에 위와 같은 오류 메시지를 반환합니다.

Windows 클라이언트 컴퓨터의 기본 정책으로

Restricted

는 설정되어 있습니다. PowerShell을 처음 사용하는 경우 기본 정책은 모든 스크립트를 제한하는 것입니다.

터미널에서는 개별 명령을 실행할 수 있지만 스크립트 파일은 실행할 수 없습니다. 이 제한에는 .ps1xml, .psm1 또는 .ps1로 끝나는 파일이 포함됩니다.

Unrestricted

은 모든 스크립트를 실행할 수 있지만, 인터넷에서 다운로드한 스크립트인 경우 실행하기 전에 경고를 표시합니다. 이 정책은 일반적으로 Windows가 아닌 기기의 기본 설정입니다.

Remote Signed

정책을 사용하면 인터넷에서 다운로드한 스크립트를 실행할 때 이상적인 옵션입니다.All Signed는 신뢰할 수 있는 발행자에 의해 디지털로 서명된 모든 스크립트를 요구합니다. 이는 인터넷에서 다운로드한 스크립트와 로컬 컴퓨터에 작성된 스크립트를 모두 포함합니다.

PowerShell 실행 정책 변경

실행 정책을 변경하려면:

  1. 관리자 권한으로 실행된 Windows PowerShell을 엽니다. 정책 변경을 위해 최고 권한을 가지고 있는지 확인하세요.
Search PowerShell in Start Menu

2. 열린 창에서 컴퓨터의 실행 정책을 설정하기 위해 다음 PowerShell 명령을 실행합니다. 위에서 다룬 것처럼 실행 정책은 세 가지 유형 중 하나일 수 있습니다. 이 자습서는 여전히 유용하면서도 안전한 RemoteSigned 실행 정책을 사용합니다.

이 자습서는 인터넷에서 GetServices.ps1 스크립트 파일을 다운로드했다고 가정하고, 실행 정책을 RemoteSigned로 설정합니다.

PS> Set-ExecutionPolicy RemoteSigned

RemoteSigned 실행 정책은 인터넷에서 다운로드한 모든 PowerShell 스크립트를 시스템에서 실행하기 전에 암호화하여 서명해야 합니다.

3. 동작을 확인하는 출력이 표시됩니다. 동작을 확인하려면 Y를 입력하고 엔터 키를 누르세요. 정책 변경을 확인합니다.

Execution Policy Change
 The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the
 security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to
 change the execution policy?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

이 시점에서 PowerShell 스크립트를 컴퓨터에서 실행하는 다른 방법을 탐색하려면 다음 단계를 따르세요.

PowerShell 스크립트 실행 방법

파워쉘 스크립트를 실행하는 방법을 시연하려면, 실제로 실행할 스크립트 파일이 있어야 합니다! 만약 가지고 있는 파일이 없다면, 이 ZIP 파일을 다운로드하고 내부의 PS1 파일을 추출하세요. 안에는 GetServices.ps1이라고 불리는 간단한 스크립트 파일을 찾을 수 있을 겁니다.

Write-Output "Listing Computer Services"
Get-Service

모든 파워쉘 스크립트는 .ps1 확장자로 끝나야 합니다.

콘솔 사용하기

스크립트를 준비하고 나면, 파워쉘 스크립트 파일을 실행하는 몇 가지 다른 방법이 있습니다. 가장 일반적인 방법 중 하나는 파워쉘 콘솔을 통하는 것입니다.

그렇게 하려면:

  1. 위와 같이 파워쉘 콘솔을 엽니다.

2. 스크립트가 위치한 파일 시스템 위치로 이동합니다. 이를 위해 Set-Location 파워쉘 cmdlet이나 cd 별칭을 사용하세요. 이 튜토리얼의 스크립트는 C:\Temp 디렉토리에서 찾을 수 있습니다.

PS> cd C:\Temp\

3. 점(.) 표기법을 사용해 스크립트를 실행하세요. 파워쉘은 명령 이름도 찾는 셸입니다. 파워쉘 명령과 스크립트를 구분하기 위해서는 스크립트 앞에 점을 붙여야 합니다. 이 점은 현재 디렉토리를 나타냅니다.

 PS> .\GetServices.ps1

파워쉘 콘솔을 통하지 않고 명령 줄을 통해 파워쉘 스크립트를 실행하는 방법

파워쉘 콘솔을 통해 스크립트를 실행할 수 없거나 하고 싶지 않다면, 좋은 오래된 명령 줄(명령 프롬프트)을 사용해서도 할 수 있습니다.

명령 프롬프트를 통해 스크립트를 실행하려면 먼저 PowerShell 실행 파일(powershell.exe)을 시작해야 합니다. PowerShell 위치는 C:\Program Files\WindowsPowerShell\powershell.exe 이며, 스크립트 경로를 매개변수로 전달해야 합니다.

PowerShell 실행 파일을 실행하는 동안 매개변수를 지정하여 어떤 컨텍스트에서든 스크립트를 실행할 수 있습니다. 예를 들어 powershell.exe -Parameter 'Foo' -Parameter2 'Bar'와 같이 간단히 지정하면 됩니다.

cmd.exe를 열면 아래와 같이 PowerShell 스크립트를 실행할 수 있습니다. 이 예제는 엔진을 실행하고 스크립트 경로를 전달하는 것입니다: C:\Temp\GetServices.ps1.

아래 예제에서 스크립트를 실행하기 위해 PowerShell 위치 경로를 사용하는 것을 주목하세요. 폴더가 PATH에 없는 경우에는 이렇게 해야 합니다.

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

PowerShell 7의 PowerShell 위치는 일반적으로 pwsh.exe라는 다른 실행 파일을 사용하며, 위치는 보통 C:\Program Files\PowerShell\7\pwsh.exe에 있습니다.

아래는 cmd.exe가 실행하는 배치 파일을 통해 스크립트를 실행하는 방법을 설명하는 유용한 YouTube 비디오입니다.

PowerShell ISE 사용하기

스크립트를 작성하거나 다른 사람의 스크립트를 편집하는 경우, PowerShell ISE 또는 Visual Studio (VS) Code와 같은 스크립트 편집기를 사용할 것입니다. ISE는 Windows와 함께 제공되므로, 이 튜토리얼에서는 그 방법에 중점을 둘 것입니다.

ISE를 통해 스크립트를 호출하려면:

  1. 시작 메뉴로 이동하여 PowerShell ISE를 검색하고 엽니다.
Search PowerShell ISE in Start Menu

2. 파일열기를 클릭하고 스크립트를 찾습니다.

Open Script using File Menu

3. 스크립트를 열고, 녹색 실행 버튼을 클릭하여 스크립트를 실행합니다. 이 버튼은 하단의 내장 PowerShell 터미널에서 스크립트를 호출합니다.

Run Script using PowerShell ISE

샘플 스크립트의 출력

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

샘플 GetServices.ps1 스크립트를 실행하면 다음이 표시됩니다. 이 스크립트는 로컬 Windows 컴퓨터에 설치된 모든 서비스를 반환하는 Get-Service cmdlet을 실행합니다.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

스크립트 내에서 스크립트 호출하기

두 개의 스크립트가 있고 하나를 다른 것을 호출하려고 합니다. 아마도 GetUser.ps1ResetPassword.ps1이라는 스크립트가 있습니다. GetUser.ps1 스크립트 내에서 사용자 암호를 재설정하기 위해 ResetPassword.ps1을 실행하려고 합니다.

호출 스크립트(GetUser.ps1) 내에서 명령 스크립트를 실행하려면 명령줄에서 스크립트를 호출하는 것과 같이 다른 스크립트를 추가합니다.

아래에서 여러 옵션이 있습니다. 특정한 이유가 없다면 같은 세션 또는 범위 내에서 다른 스크립트를 실행하는 것이 간단하므로 일반적으로 이를 선택하는 것이 좋습니다.

## 새 세션에서 다른 스크립트를 실행하려면
powershell.exe .\ResetPassword.ps1
## 같은 세션에서 다른 스크립트를 실행하려면
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/