다음을 통해 공유


1장 - PowerShell 시작

이 장에서는 PowerShell을 찾아서 시작하고 새 사용자가 PowerShell로 경험하는 초기 문제를 해결하는 데 중점을 둡니다. 랩 환경 컴퓨터에서 이 챕터의 예제를 따라 안내합니다.

PowerShell이란?

Windows PowerShell은 Windows 기반 시스템의 관리 작업을 자동화하기 위한 사용하기 쉬운 명령줄 셸 및 스크립팅 환경입니다. Windows PowerShell은 모든 최신 버전의 Windows 운영 체제에 사전 설치되어 있습니다.

PowerShell을 찾을 수 있는 위치

Windows 11에서 PowerShell을 찾는 가장 쉬운 방법은 그림 1-1과 같이 검색 창에 입력 PowerShell 하는 것입니다. Windows PowerShell에 대한 네 가지 바로 가기가 있습니다.

그림 1-1 - PowerShell 검색

64비트 버전의 Windows PowerShell 바로 가기:

  • Windows PowerShell
  • Windows PowerShell ISE
  • Windows PowerShell(x86)
  • Windows PowerShell ISE(x86)

64비트 버전의 Windows에서는 바로 가기의 (x86) 접미사에 표시된 대로 64비트 버전의 Windows PowerShell 콘솔과 Windows PowerShell ISE(통합 스크립팅 환경)와 32비트 버전의 각 버전이 있습니다.

참고 항목

Windows 11은 64비트 운영 체제로만 제공됩니다. Windows 11에는 32비트 버전이 없습니다. 그러나 Windows 11에는 32비트 버전의 Windows PowerShell 및 Windows PowerShell ISE가 포함되어 있습니다.

이전 32비트 버전의 Windows를 실행하는 경우 두 개의 바로 가기만 있습니다. 이러한 바로 가기에는 (x86) 접미사가 없지만 32비트 버전입니다.

32비트 버전을 사용하는 특정 이유가 없는 한 64비트 운영 체제를 실행하는 경우 64비트 버전의 Windows PowerShell을 사용하는 것이 좋습니다.

실행 중인 Windows 11 버전에 따라 Windows PowerShell이 Windows 터미널 열릴 수 있습니다.

Microsoft는 더 이상 PowerShell ISE를 업데이트하지 않습니다. ISE는 Windows PowerShell 5.1에서만 작동합니다. PowerShell 확장을 사용한 VS Code(Visual Studio Code)는 두 버전의 PowerShell에서 모두 작동합니다. VS Code 및 PowerShell 확장은 Windows에서 제공되지 않습니다. PowerShell 스크립트를 만드는 컴퓨터에 VS Code 및 확장을 설치합니다. PowerShell을 실행하는 모든 컴퓨터에 설치할 필요는 없습니다.

PowerShell을 시작하는 방법

지원되는 프로덕션 환경에서 세 가지 다른 Active Directory 사용자 계정을 사용합니다. 저는 이 책에 사용된 랩 환경에서 이러한 계정을 미러링했습니다. 도메인 또는 로컬 관리자 권한이 없는 도메인 사용자로 Windows 11 컴퓨터에 로그인합니다.

그림 1-1과 같이 Windows PowerShell 바로 가기를 클릭하여 PowerShell 콘솔을 시작합니다. 그림 1-2와 같이 콘솔의 제목 표시줄에 Windows PowerShell이 표시됩니다.

그림 1-2 - PowerShell 창의 제목 표시줄

일부 명령은 일반 사용자로 PowerShell을 실행할 때 잘 실행됩니다. 그러나 PowerShell은 UAC(사용자 액세스 제어)참여하지 않습니다. 즉, 관리자의 승인이 필요한 작업에 대한 권한 상승을 요구할 수 없습니다.

참고 항목

UAC는 악성 코드가 상승된 권한으로 실행되지 않도록 하는 Windows 보안 기능입니다.

일반 사용자로 로그온하면 권한 상승이 필요한 명령을 실행할 때 PowerShell에서 오류를 반환합니다. 예를 들어 Windows 서비스를 중지합니다.

Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceCon
   troller:ServiceController) [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
   ands.StopServiceCommand

해결 방법은 로컬 관리자인 사용자로 승격된 PowerShell을 실행하는 것입니다. 두 번째 도메인 사용자 계정을 구성한 방법입니다. 최소 권한 원칙에 따라 이 계정은 도메인 관리자가 되거나 도메인에 상승된 권한이 없어야 합니다.

상승된 권한으로 PowerShell을 시작하려면 그림 1-3과 같이 Windows PowerShell 바로 가기를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 선택합니다.

그림 1-3 - 상황에 맞는 메뉴 - 관리자 권한으로 실행

Windows에서 일반 사용자로 로그인했기 때문에 자격 증명을 묻는 메시지가 표시됩니다. 그림 1-4와 같이 로컬 관리자인 도메인 사용자의 자격 증명을 입력합니다.

그림 1-4 - 사용자 계정 컨트롤 - 자격 증명을 입력합니다.

관리자 권한 콘솔 창의 제목 표시줄에는 그림 1-5와 같이 관리자: Windows PowerShell이 표시됩니다.

그림 1-5 - 관리자 권한 PowerShell 창의 제목 표시줄

관리자 권한으로 PowerShell을 실행했으므로 권한 상승이 필요한 명령을 실행할 때 UAC는 더 이상 문제가 되지 않습니다.

Important

반드시 필요한 경우에만 관리자 권한으로 PowerShell을 실행해야 합니다.

원격 컴퓨터를 대상으로 하는 경우 PowerShell 관리자 권한으로 실행할 필요가 없습니다. PowerShell 관리자 권한으로 실행하면 로컬 컴퓨터에 대해 실행되는 명령에만 영향을 줍니다.

PowerShell 찾기 및 시작을 간소화할 수 있습니다. PowerShell 또는 Windows 터미널 바로 가기를 작업 표시줄에 고정합니다. PowerShell을 다시 검색합니다. 단, 이번에는 마우스 오른쪽 단추로 클릭하고 그림 1-6과 같이 작업 표시줄에 고정을 선택합니다.

그림 1-6 - 상황에 맞는 메뉴 - 작업 표시줄에 고정합니다.

Important

2017년에 게시된 이 책의 원래 버전은 PowerShell을 시작할 때마다 자동으로 관리자 권한 인스턴스를 시작하도록 작업 표시줄에 바로 가기를 고정하는 것이 좋습니다. 그러나 잠재적인 보안 문제로 인해 더 이상 권장하지 않습니다. 또한 PowerShell의 관리자 권한 인스턴스에서 시작하는 모든 애플리케이션은 UAC를 우회하고 관리자 권한으로 실행됩니다. 예를 들어 PowerShell의 관리자 권한 인스턴스에서 웹 브라우저를 시작하는 경우 악성 코드가 포함된 웹 사이트도 관리자 권한으로 실행됩니다.

관리자 권한으로 PowerShell을 실행해야 하는 경우 Shift 키를 누르는 동안 작업 표시줄에 고정된 PowerShell 바로 가기를 마우스 오른쪽 단추로 클릭합니다. 그림 1-7과 같이 관리자 권한으로 실행을 선택합니다.

그림 1-7 - 상황에 맞는 메뉴 - 관리자 권한으로 실행

PowerShell 버전 확인

PowerShell에는 상태 정보를 저장하는 자동 변수가 있습니다. 이러한 변수 중 하나는 PowerShell 세션에 대한 버전 정보를 포함하는 것입니다 $PSVersionTable.

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.22621.2428
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.2428
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

5.1 이전 버전의 Windows PowerShell을 실행하는 경우 Windows 버전을 업데이트해야 합니다. Windows PowerShell 5.1은 현재 지원되는 Windows 버전에 미리 설치되어 있습니다.

PowerShell 버전 7은 Windows PowerShell 5.1의 대체 버전이 아닙니다. Windows PowerShell과 함께 설치됩니다. Windows PowerShell 버전 5.1 및 PowerShell 버전 7은 서로 다른 두 제품입니다. Windows PowerShell 버전 5.1과 PowerShell 버전 7 간의 차이점에 대한 자세한 내용은 Windows PowerShell 5.1에서 PowerShell 7로 마이그레이션을 참조하세요.

이전의 PowerShell Core로 알려진 PowerShell 버전 6은 더 이상 지원되지 않습니다.

실행 정책

PowerShell 실행 정책은 PowerShell 스크립트를 실행할 수 있는 조건을 제어합니다. PowerShell의 실행 정책은 악의적인 스크립트의 의도하지 않은 실행을 방지하도록 설계된 안전 기능입니다. 그러나 결정된 사용자가 의도적으로 스크립트를 실행하는 것을 막을 수는 없으므로 보안 경계가 아닙니다. 결정된 사용자는 PowerShell에서 실행 정책을 무시할 수 있습니다.

로컬 컴퓨터, 현재 사용자 또는 PowerShell 세션에 대한 실행 정책을 설정할 수 있습니다. 그룹 정책을 사용하여 사용자 및 컴퓨터에 대한 실행 정책을 설정할 수도 있습니다.

다음 표에서는 현재 Windows 운영 체제에 대한 기본 실행 정책을 보여 줍니다.

Windows 운영 체제 버전 기본 실행 정책
Windows Server 2022 원격 서명됨
Windows Server 2019 원격 서명됨
Windows Server 2016 원격 서명됨
Windows 11 Restricted
Windows 10 Restricted

실행 정책 설정에 관계없이 모든 PowerShell 명령을 대화형으로 실행할 수 있습니다. 실행 정책은 스크립트에서 실행하는 명령에만 영향을 줍니다. cmdlet을 Get-ExecutionPolicy 사용하여 현재 실행 정책 설정을 확인합니다.

컴퓨터에서 실행 정책 설정을 확인합니다.

Get-ExecutionPolicy
Restricted

모든 범위에 대한 실행 정책 설정을 나열합니다.

Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

모든 Windows 클라이언트 운영 체제에는 기본 실행 정책 설정이 Restricted있습니다. 실행 정책 설정을 사용하여 PowerShell 스크립트를 Restricted 실행할 수 없습니다. 실행 정책을 테스트하려면 다음 코드를 이름이 지정된 Get-TimeService.ps1파일로 .ps1 저장합니다.

PowerShell 스크립트는 실행하려는 명령이 포함된 일반 텍스트 파일입니다. PowerShell 스크립트 파일은 파일 확장자를 .ps1 사용합니다. PowerShell 스크립트를 만들려면 VS Code(Visual Studio Code)와 같은 코드 편집기 또는 메모장과 같은 텍스트 편집기를 사용합니다.

다음 명령을 대화형으로 실행하면 오류 없이 완료됩니다.

Get-Service -Name W32Time

그러나 스크립트에서 동일한 명령을 실행하면 PowerShell에서 오류가 반환됩니다.

.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.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
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShell에서 오류를 생성하는 명령을 실행하는 경우 명령을 다시 시도하기 전에 오류 메시지를 읽습니다. 명령이 실패한 이유를 알려주는 오류 메시지가 표시됩니다.

... 실행 중인 스크립트는 이 시스템에서 사용할 수 없습니다.

스크립트 실행을 사용하도록 설정하려면 cmdlet을 사용하여 실행 정책을 Set-ExecutionPolicy 변경합니다. LocalMachine는 범위 매개 변수를 지정하지 않는 경우 기본 범위입니다. 로컬 컴퓨터에 대한 실행 정책을 변경하려면 관리자 권한으로 PowerShell을 실행해야 합니다. 스크립트에 서명하지 않는 한 실행 정책을 사용하는 RemoteSigned 것이 좋습니다. RemoteSigned 에서는 신뢰할 수 있는 게시자가 서명하지 않은 다운로드한 스크립트를 실행할 수 없습니다.

실행 정책을 변경하기 전에 about_Execution_Policies 도움말 문서를 읽어 보안에 미치는 영향을 이해합니다.

컴퓨터의 실행 정책 설정을 .로 RemoteSigned변경합니다.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

실행 정책을 성공적으로 변경한 경우 PowerShell은 다음 경고를 표시합니다.

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"):y

관리자 권한으로 PowerShell을 실행하지 않는 경우 PowerShell은 다음 오류 메시지를 반환합니다.

Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy],
   UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
   PowerShell.Commands.SetExecutionPolicyCommand

관리자 권한으로 PowerShell을 실행할 필요 없이 현재 사용자의 실행 정책을 변경할 수도 있습니다. 로컬 컴퓨터에 RemoteSigned대한 실행 정책을 .로 설정하면 이 단계가 필요하지 않습니다.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

실행 정책을 설정하면 RemoteSigned스크립트가 Get-TimeService.ps1 성공적으로 실행됩니다.

.\Get-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Running  W32Time            Windows Time

요약

이 챕터에서는 찾을 위치와 PowerShell을 시작하는 방법을 알아보았습니다. 또한 PowerShell 버전과 실행 정책의 목적을 확인하는 방법도 알아보았습니다.

검토

  1. 컴퓨터에서 실행 중인 PowerShell 버전을 확인하려면 어떻게 해야 하나요?
  2. 관리자 권한으로 PowerShell을 언제 시작해야 하나요?
  3. Windows 클라이언트 컴퓨터의 기본 실행 정책은 무엇이며 어떤 작업을 수행할 수 없나요?
  4. 현재 PowerShell 실행 정책 설정을 어떻게 결정합니까?
  5. PowerShell 실행 정책을 변경하려면 어떻게 해야 합니까?

참조

이 챕터에서 다루는 개념에 대해 자세히 알아보려면 다음 PowerShell 도움말 문서를 참조하세요.

다음 단계

다음 장에서는 PowerShell 명령의 검색 기능을 알아봅니다. PowerShell 세션에서 도움말을 볼 수 있도록 PowerShell의 도움말 파일을 다운로드하는 방법도 알아봅니다.