Windows PowerShell은 객체 지향 자동화 엔진이자 스크립팅 언어입니다. 주로 IT 전문가와 시스템 관리자가 Windows OS 및 기타 애플리케이션의 관리를 제어하고 자동화하기 위해 설계되었습니다. Windows 명령 프롬프트와 Windows Script Host 환경에서 얻은 지식과 스크립트를 확장하는 매력적인 새로운 개념을 제공합니다.
스크립팅의 유연성, 명령줄 속도, GUI 기반 관리 도구의 파워를 결합했습니다. 시스템 관리자가 미래의 수작업 시간을 없애도록 도와 문제를 효율적으로 해결할 수 있게 합니다. PowerShell 학습에 알아야 할 모든 중요한 측면을 다룹니다.
이 PowerShell 초보자 튜토리얼에서는 다음과 같은 PowerShell 기초를 배웁니다:
PowerShell이란?
왜 PowerShell을 사용하는가?
PowerShell 역사
PowerShell 특징
PowerShell 실행 방법
PowerShell Cmdlet
Cmdlet vs Command:
PowerShell 데이터 타입:
특수 변수
PowerShell 스크립트
첫 PowerShell 스크립트
PowerShell ISE란?
PowerShell 개념
PowerShell vs 명령 프롬프트
PowerShell 응용 분야
이것은 PowerShell 스크립팅 기초에 대한 완전한 가이드입니다… 시작해 봅시다!
왜 PowerShell을 사용하는가?
PowerShell 사용의 중요한 이유들:
운영 체제에 대한 잘 통합된 명령줄 경험 제공
.NET 프레임워크의 모든 타입에 완전한 접근 허용
시스템 관리자들이 신뢰함
서버 및 워크스테이션 구성 요소를 조작하는 간단한 방법
시스템 관리자를 위해 더 쉬운 문법으로 설계됨
VBScript나 다른 스크립팅 언어 실행보다 더 안전함
PowerShell 역사
PowerShell 첫 버전 1.0은 2006년 출시. 현재 PowerShell은 버전 7.2입니다. 버전이 거듭될수록 PowerShell의 기능과 호스팅 환경이 크게 성장했습니다.
버전별 PowerShell 역사:
PowerShell 1.0: Windows Server 2003 로컬 관리 지원
PowerShell 2.0: Windows 7 및 Windows Server 2008 R2와 통합. 원격 지원, 트랜잭션, 백그라운드 작업, 이벤트, 디버깅 등 기능 강화
PowerShell 3.0: Windows 관리 프레임워크 내부 부분으로 릴리스. Windows 8 및 Windows Server 2012에 설치. 예약 작업, 세션 연결, 자동 모듈 로드 등 추가
PowerShell 4.0: Windows 8.1 및 Windows Server 2012 R2와 함께 제공. 원하는 상태 구성, 향상된 디버깅, 네트워크 진단 지원 추가
PowerShell 5.0: Windows 관리 프레임워크 5 내부 부분으로 릴리스. 원격 디버깅, 클래스 정의, .NET 열거형 등 기능 제공
PowerShell 7.2: .NET 6.0 기반. 새로운 연산자, 단순화된 동적 오류 보기, 자동 새 버전 알림 등 제공
다음으로 PowerShell 특징에 대해 알아보겠습니다.
PowerShell 특징
PowerShell 원격(Remoting): 스크립트와 cmdlet을 원격 머신에서 호출 가능
백그라운드 작업(Background Jobs): 스크립트나 파이프라인을 비동기적으로 호출. 로컬 머신 또는 여러 원격 머신에서 작업 실행 가능
트랜잭션(Transactions): cmdlet 활성화 및 개발자가 수행 허용
이벤트(Events): 관리 및 시스템 이벤트 수신, 전달, 조치 지원
네트워크 파일 전송: BITS(Background Intelligent Transfer Service) 기술을 사용해 머신 간 우선순위, 비동기, 스로틀링된 파일 전송 네이티브 지원
PowerShell 실행 방법
이제 Windows OS에서 PowerShell을 실행하는 방법을 배워봅시다.
PowerShell은 최신 모든 Windows 버전에 사전 설치되어 있습니다. 실행을 위해 다음 단계 수행:
1단계) Windows에서 PowerShell 검색. 선택 후 클릭
2단계) PowerShell 창 열림
PowerShell Cmdlet
Cmdlet(Command-let)은 Windows 기반 PowerShell 환경에서 사용되는 가벼운 명령입니다. PowerShell은 명령 프롬프트에서 이 cmdlet을 호출합니다. PowerShell API를 사용하여 cmdlet 명령을 생성하고 호출할 수 있습니다.
Cmdlet vs Command:
Cmdlet은 다른 명령 셸 환경의 명령과 다음 면에서 다릅니다:
Cmdlet은 .NET Framework 클래스 객체로 별도 실행 불가
Cmdlet은 불과 수십 줄 코드로 구성 가능
파싱, 출력 포맷팅, 오류 표시는 cmdlet이 처리하지 않음
Cmdlet은 객체 기반 작동. 텍스트 스트림과 객체를 파이프라이닝 출력으로 전달 불가
Cmdlet은 레코드 기반으로 단일 객체씩 처리
대부분의 PowerShell 기능은 Cmdlet에서 나오며 항상 동사-명사 형식이고 복수형이 아닙니다. 또한 Cmdlet은 텍스트가 아닌 객체를 반환합니다. Cmdlet은 한 줄 이상인 명령 시리즈로, .ps1 확장자 텍스트 파일에 저장됩니다.
Cmdlet은 항상 하이픈으로 구분된 동사와 명사로 구성됩니다. PowerShell 학습에 사용되는 주요 동사:
Get — 무언가 가져오기
Start — 무언가 실행하기
Out — 무언가 출력하기
Stop — 실행 중인 것 중지
Set — 무언가 정의하기
New — 무언가 생성하기
PowerShell 명령어
중요한 PowerShell 명령어 목록:
Get-Help: PowerShell 명령 및 주제 도움말
예: Format-Table 명령 도움말 표시
Get-Help Format-Table
Get-Command: 호출 가능한 모든 것에 대한 정보 조회
PowerShell 스크립트 예: 머신에 설치된 cmdlet, 함수 목록 생성
Get-Command
Get-Service: 'service' 단어가 포함된 모든 cmdlet 찾기
예: "vm"으로 시작하는 모든 서비스 조회
Get-Service "vm*"
Get-Member: 객체로 할 수 있는 작업 표시
예: vm 프로세스 멤버 조회
Get-Service "vm*" | Get-Member
기타 명령:
Get Module: 명령 패키지 표시
Get Content: 파일 내용 처리 및 활용
Get-: 'get-'로 시작하는 모든 cmdlet 찾기
예: 폴더 생성
New-Item -Path 'X:\Guru99' -ItemType Directory
출력
PowerShell 데이터 타입:
PowerShell 데이터 타입
특수 변수
특수 변수
설명
$Error
가장 최근 오류를 표시하는 오류 객체 배열
$Host
현재 호스팅 애플리케이션 이름 표시
$Profile
기본 셸의 사용자 프로필 전체 경로 저장
$PID
프로세스 식별자 저장
$PSUICulture
현재 UI 문화권 이름 보유
$NULL
빈 값 또는 NULL 값 포함
$False
FALSE 값 포함
$True
TRUE 값 포함
PowerShell 스크립트
PowerShell 스크립트는 .ps1 파일에 저장됩니다. 기본적으로 파일을 더블클릭해 실행할 수 없습니다. 이는 우발적 피해로부터 시스템을 보호합니다. 스크립트 실행 방법:
1단계: 우클릭 후 "PowerShell로 실행" 클릭
또한 스크립트 실행을 제한하는 정책이 있습니다. Get-ExecutionPolicy 명령으로 확인 가능.
다음 출력 중 하나 나옴:
Restricted — 스크립트 실행 불가. 기본 설정으로 최초 명령 실행 시 표시
AllSigned — 신뢰할 수 있는 개발자가 서명한 스크립트만 실행. 실행 전 확인 요청
Windows PowerShell 통합 스크립팅 환경(ISE)은 Windows PowerShell의 기본 편집기입니다. 이 ISE에서 명령을 실행하고, 테스트 작성, 스크립트 디버깅을 윈도우 기반 GUI 환경에서 할 수 있습니다. 다중 줄 편집, 구문 강조, 탭 완성, 선택적 실행 등 다양한 기능 지원.
Windows PowerShell ISE는 콘솔 창에서 명령 실행도 허용합니다. 또한 소스 코드와 ISE에 연결할 수 있는 다른 도구를 동시에 볼 수 있는 창도 지원합니다.
여러 스크립트 창을 동시에 열 수 있습니다. 다른 스크립트나 모듈에 정의된 함수를 사용하는 스크립트 디버깅 시 특히 유용.
이제 PowerShell 초보자 튜토리얼에서 중요한 PowerShell 개념을 배워봅시다:
Cmdlets Cmdlet은 VB나 C# 같은 .NET 언어로 작성된 빌트인 명령입니다. 개발자가 PowerShell 스냅인을 로드하고 작성하여 cmdlet 세트 확장 가능.
Functions 함수는 PowerShell 언어로 작성된 명령입니다. Visual Studio 같은 다른 IDE 없이 개발 가능.
Scripts 스크립트는 .ps1 확장자 디스크 텍스트 파일
Applications 애플리케이션은 기존 Windows 프로그램
WhatIf cmdlet을 실행하지 않고 실행 시 무슨 일이 일어날지 알려줌
Confirm 명령 실행 전 프롬프트로 확인 요청
Verbose 더 높은 수준의 세부 정보 제공
Debug cmdlet이 디버깅 정보 제공하도록 지시
ErrorAction 오류 발생 시 cmdlet이 수행할 특정 동작 지시. 허용: continue, stop, silently-continue, inquire
ErrorVariable 오류 정보를 담을 변수 지정
OutVariable 출력 정보를 담을 특정 변수 사용 지시
OutBuffer 파이프라인의 다음 cmdlet 호출 전 특정 개수 객체 보관 지시
PowerShell 스크립트 사용 장점
PowerShell 스크립트는 정말 강력하며 적은 줄로 많은 작업 수행 가능
변수는 $<변수> 형태로 선언
변수는 명령 출력, 객체, 값 보관 가능
변수 "타입" 지정 불필요
PowerShell vs 명령 프롬프트
PowerShell
명령 프롬프트
Windows OS와 깊게 통합. 대화형 명령줄 인터페이스와 스크립팅 언어 제공
Microsoft 제공 기본 명령줄 인터페이스. Windows OS에서 win32 객체와 상호작용하는 간단한 win32 애플리케이션
cmdlet이라 불리는 것 사용. 런타임 환경이나 자동화 스크립트에서 호출 가능
그런 기능 제공 안 함
객체로 간주. 출력을 파이프라인을 통해 다른 cmdlet 입력으로 전달 가능
cmdlet 출력이 단순 텍스트 스트림이 아닌 객체 컬렉션
기능, 능력, 내부 동작 면에서 매우 진보됨
명령 프롬프트는 매우 기본적
PowerShell 응용 분야
오늘날 PowerShell은 대규모 기업 네트워크에서 관리 작업과 노력을 줄여주므로 IT 관리자에게 이상적 선택이 되었습니다. 예를 들어 400대 이상 서버가 있는 대규모 네트워크를 관리한다고 가정해 봅시다. 이제 새로운 보안 솔루션을 구현하려 합니다. 이 솔루션은 해당 서버들에서 실행되어야 하는 특정 서비스에 의존합니다.
각 서버에 로그인해 해당 서비스 설치 및 실행 여부 확인 가능. 하지만 직원들이 이 비생산적 프로세스에 많은 시간 쏟게 되고 인적 오류도 많이 발생합니다.
그러나 PowerShell을 사용하면 이 작업을 단 몇 분 만에 완료할 수 있습니다. 단일 스크립트로 서버들에서 실행 중인 서비스 정보를 수집하기 때문입니다.
요약
Windows PowerShell은 객체 지향 자동화 엔진이자 스크립팅 언어
운영 체제에 잘 통합된 명령줄 경험 제공
PowerShell 1.0 버전 2006년 출시
스크립트와 cmdlet을 원격 머신에서 호출 가능
최신 모든 Windows 버전에 사전 설치
Cmdlet은 Windows 기반 PowerShell 환경에서 사용되는 가벼운 명령
Get, Start, Out, Stop, Set, New는 중요한 PowerShell 명령
Boolean, Byte, Char, Decimal, Long 등은 중요한 PowerShell 데이터 타입
$Error, $Host, $Profile, $PID, $PSUICulture, $NULL 등은 PowerShell 특수 변수
Windows PowerShell ISE는 PowerShell 기본 편집기
PowerShell은 Windows OS와 깊게 통합되는 반면 명령 프롬프트는 Microsoft 제공 기본 명령줄 인터페이스
PowerShell은 대규모 기업 네트워크에서 관리 작업과 노력을 줄여주어 IT 관리자에게 이상적 선택