1장 - PowerShell 시작

회의 및 사용자 그룹 모임의 발표자가 초급 프레젠테이션을 시작할 때 이미 PowerShell을 실행하고 있는 경우가 많습니다. 이 책은 PowerShell을 사용해 본 적 없는 참석자들이 세션에서 한 질문에 대답하는 것으로 시작합니다.

특히 이 장에서는 PowerShell을 찾아 실행하고, PowerShell을 처음 사용하는 사용자가 초반에 겪는 문제를 해결하는 방법을 중점적으로 설명합니다. Windows 10 랩 환경 컴퓨터의 이 챕터에 표시된 예제를 따라 진행해야 합니다.

PowerShell을 시작하려면 어떻게 해야 하나요?

모든 최신 버전의 Windows 운영 체제는 PowerShell이 설치된 상태에서 제공됩니다. 5.1 이전 버전을 실행하는 경우 최신 버전을 설치해야 합니다.

  • Windows PowerShell 5.1로 업그레이드하려면 기존 Windows PowerShell 업그레이드를 참조 하세요.
  • 최신 버전의 PowerShell을 설치하려면 PowerShell 설치를 참조 하세요.

PowerShell은 어디에서 찾을 수 있나요?

Windows 10에서 PowerShell을 찾는 가장 쉬운 방법은 그림 1-1처럼 검색 창에 PowerShell를 입력하는 것입니다.

그림 1-1 - 시작 메뉴에서 PowerShell 검색

PowerShell에 대한 네 가지 바로 가기가 그림 1-1에 표시됩니다. 이 책에서 시연 목적으로 사용하는 컴퓨터는 Windows 10 64비트 버전을 실행하고 있습니다. 따라서 64비트 버전의 PowerShell 콘솔과 PowerShell ISE(통합 스크립팅 환경)가 있으며, 각 항목의 32비트 버전은 바로 가기에 (x86) 접미사가 붙습니다. Windows 10 32비트 버전을 실행해야 한다면 두 가지 바로 가기만 사용할 수 있습니다. 이러한 항목에는 (x86) 접미사가 없지만 32비트 버전입니다. 64비트 운영 체제가 있는 경우 32비트 버전을 실행할 특정 이유가 없는 한 64비트 버전의 PowerShell을 실행하는 것이 좋습니다.

다른 버전의 Windows에서 PowerShell을 시작하는 방법에 대한 자세한 내용은 Windows PowerShell 시작을 참조하세요.

PowerShell을 시작할 어떻게 할까요? 있나요?

필자가 지원하는 프로덕션 엔터프라이즈 환경에서 필자는 세 가지 Active Directory 사용자 계정을 사용합니다. 이 책에 사용된 랩 환경에서 해당 계정을 미러. 할 일기본 또는 로컬 관리자가 아닌 사용자로 Windows기본 10 컴퓨터에 로그인합니다.

그림 1-1과 같이 "Windows PowerShell" 바로 가기를 클릭하여 PowerShell 콘솔을 시작했습니다.

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

PowerShell 콘솔의 제목 표시줄에는 그림 1-4와 같이 "Windows PowerShell"이 표시됩니다. 일부 명령은 정상적으로 실행되지만 PowerShell은 UAC(사용자 계정 컨트롤)에는 참여할 수 없습니다. 즉, 관리자의 승인이 필요한 작업에 대한 권한 상승을 요구할 수 없습니다. 다음 오류 메시지가 생성됩니다.

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

이 문제의 해결 방법은 로컬 관리자인 기본 사용자로 PowerShell을 실행하는 것입니다. 필자는 두 번째 도메인 사용자 계정을 이 방법으로 구성합니다. 최소 권한 원칙에 따라 이 계정은 도메인 관리자가 아니거나 도메인에서 승격된 권한을 가져야 합니다.

PowerShell을 닫습니다. PowerShell 콘솔을 다시 시작합니다. 단, 이번에는 Windows PowerShell 바로 가기를 마우스 오른쪽 단추로 클릭하고 그림 1-5와 같이 관리자 권한으로 실행을 선택합니다.

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

Windows에 일반 사용자로 로그인한 경우 자격 증명을 묻는 메시지가 표시됩니다. 그림 1-6과 같이 할 일기본 사용자 및 로컬 관리자인 내 사용자 계정에 대한 자격 증명을 입력합니다.

그림 1-6

PowerShell이 관리자로 다시 시작되면 제목 표시줄에 그림 1-7과 같이 "관리istrator: Windows PowerShell"이 표시됩니다.

그림 1-7

PowerShell이 로컬 관리자 권한으로 실행되고 있으므로 일반적으로 권한 상승 프롬프트가 필요한 로컬 컴퓨터에서 명령을 실행할 때 UAC는 더 이상 문제가 되지 않습니다. 하지만 이 승격된 PowerShell 콘솔에서 실행하는 모든 명령이 승격된 상태로 실행된다는 점을 명심하세요.

PowerShell을 찾아 관리자 권한으로 시작하는 작업을 간소화하려면 작업 표시줄에 고정하고 실행할 때마다 관리자로 자동으로 시작되도록 설정하는 것이 좋습니다.

PowerShell을 다시 검색합니다. 단, 이번에는 PowerShell을 마우스 오른쪽 단추로 클릭하고 그림 1-8과 같이 "작업 표시줄에 고정"을 선택합니다.

그림 1-8

이제 작업 표시줄에 고정된 PowerShell 바로 가기를 마우스 오른쪽 단추로 클릭하고 그림 1-9와 같이 속성을 선택합니다.

그림 1-9 - 사용자 계정 컨트롤 - 자격 증명 입력

그림 1-10에서 #1로 표시된 "고급"을 클릭한 다음 그림 1-10에서 #2로 표시된 대로 "관리자 권한으로 실행" 검사 상자를 검사 다음 확인을 두 번 클릭하여 변경 내용을 적용하고 두 대화 상자에서 모두 종료합니다.

그림 1-10 - “관리자”를 표시하는 제목 표시줄

PowerShell을 찾거나 다시 관리자 권한으로 실행되는지 여부에 대해 걱정할 필요가 없습니다.

UAC에 문제가 발생하지 않도록 관리자 권한으로 PowerShell을 실행하면 로컬 컴퓨터에 대해 실행되는 명령에만 영향을 줍니다. 원격 컴퓨터를 대상으로 하는 명령에는 영향을 주지 않습니다.

제가 실행하는 PowerShell 버전은 무엇인가요?

PowerShell에는 상태 정보를 저장하는 여러 자동 변수가 있습니다. 이러한 변수 중 하나인 $PSVersionTable에는 관련 PowerShell 버전 정보를 표시하는 해시 테이블이 있습니다.

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

최신 버전의 Windows PowerShell은 WMF(Windows Management Framework)의 일부로 배포됩니다. WMF 버전에 따라 특정 버전의 .NET Framework가 필요합니다. Windows PowerShell 5.1로 업그레이드하려면 기존 Windows PowerShell 업그레이드를 참조하세요.

실행 정책

일반적인 믿음과는 달리 PowerShell의 실행 정책은 보안 경계가 아닙니다. 사용자가 무의식적으로 스크립트를 실행하지 못하도록 설계되었습니다. 결정된 사용자는 PowerShell에서 실행 정책을 쉽게 무시할 수 있습니다. 표 1-2에는 현재 Windows 운영 체제에 대한 기본 실행 정책이 표시됩니다.

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

실행 정책 설정에 관계없이 모든 PowerShell 명령을 대화형으로 실행할 수 있습니다. 실행 정책은 스크립트에서 실행하는 명령에만 영향을 줍니다. cmdlet Get-ExecutionPolicy 은 현재 실행 정책 설정이 무엇인지 확인하는 데 사용되며 Set-ExecutionPolicy cmdlet은 실행 정책을 변경하는 데 사용됩니다. 내 권장 사항은 실행하기 위해 신뢰할 수 있는 게시자가 다운로드한 스크립트에 서명해야 하는 RemoteSigned 정책을 사용하는 것입니다.

현재 실행 정책을 확인합니다.

Get-ExecutionPolicy
Restricted

실행 정책이 제한됨으로 설정된 경우 PowerShell 스크립트를 전혀 실행할 수 없습니다. 이는 모든 Windows 클라이언트 운영 체제의 기본 설정입니다. 문제를 보여 주려면 다음 코드를 이름이 지정된 Stop-TimeService.ps1파일로 .ps1 저장합니다.

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

Get-Service -Name W32Time | Stop-Service -PassThru

이 명령은 PowerShell이 관리자 권한으로 실행되는 한 오류 없이 대화형으로 실행됩니다. 그러나 스크립트 파일로 저장되고 스크립트를 실행하려고 하면 오류가 발생합니다.

.\Stop-TimeService.ps1
.\Stop-TimeService.ps1 : File C:\demo\Stop-TimeService.ps1 cannot be loaded because
running scripts is disabled on this system. For more information, see
about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Stop-TimeService.ps1
+
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

이전 결과 집합에 표시된 오류는 문제가 무엇인지 정확히 알려줍니다(이 시스템에서 스크립트 실행이 비활성화됨). PowerShell에서 오류 메시지를 생성하는 명령을 실행하는 경우 명령을 다시 실행하고 성공적으로 실행되기를 바라는 대신 오류 메시지를 읽어야 합니다.

PowerShell 실행 정책을 원격 서명으로 변경합니다.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
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 http://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

실행 정책을 변경할 때 표시되는 경고를 반드시 읽어 보세요. 또한 about_Execution_Policies 도움말 항목을 검토하여 실행 정책 변경의 보안 영향을 이해하는 것이 좋습니다.

이제 실행 정책이 RemoteSigned로 설정되었으므로 Stop-TimeService.ps1 스크립트가 오류 없이 실행됩니다.

.\Stop-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Stopped  W32Time            Windows Time

그렇지 않으면 예기치 않은 문제가 발생할 수 있습니다 계속하기 전에 Windows 시간 서비스를 시작해야 합니다.

Start-Service -Name w32time

요약

이 장에서는 PowerShell을 찾고 시작하는 방법과 관리자 권한으로 PowerShell을 시작하는 바로 가기를 만드는 방법을 알아보았습니다. 기본 실행 정책 및 변경 방법에 대해서도 알아보았습니다.

검토

  1. 컴퓨터에서 실행 중인 PowerShell 버전을 확인하려면 어떻게 해야 하나요?
  2. 관리자 권한으로 PowerShell을 실행해야 하는 이유는 무엇인가요?
  3. 현재 PowerShell 실행 정책을 확인하려면 어떻게 해야 하나요?
  4. Windows 클라이언트 컴퓨터의 기본 PowerShell 실행 정책이 발생하지 않도록 하는 것은 무엇인가요?
  5. PowerShell 실행 정책을 변경하려면 어떻게 해야 합니까?

이 챕터에서 다루는 항목에 대한 자세한 내용을 알고 싶은 분들은 다음 PowerShell 도움말 항목을 읽어보는 것이 좋습니다.

다음 장에서는 PowerShell 명령의 검색 기능을 알아봅니다. 이러한 도움말 항목을 인터넷에서 볼 필요 없는 대신 PowerShell 내에서 바로 볼 수 있도록 PowerShell을 업데이트하는 방법을 설명합니다.