PowerShell

덤프버전 :


프로그래밍 사이트 선정 프로그래밍 언어 순위 목록

⠀[ IEEE Spectrum 2021 ]⠀
{{{#!wiki style="display: inline-block; margin: 0 0 -5px; min-width: 25%"
⠀[ Stack Overflow 2022 ]⠀
{{{#!wiki style="display: inline-block; margin: 0 0 -5px; min-width: 25%">
⠀[ TIOBE 2023 ]⠀

프로그래밍 언어 목록 · 분류 · 문법


PowerShell


파일:ps_black_128.svg

플랫폼
Microsoft Windows, macOS, Linux[1]
개발
Microsoft Corporation
버전
최신버전
웹사이트
Docs, GitHub
1. 개요
2. 기본 탑재
3. PowerShell Core
5. 기타
6. 관련 문서





파일:Powershell 7.3.1.png

Windows Terminal으로 구동한 Powershell 7


1. 개요[편집]


Write-Host 'Hello, World!'


Windows PowerShell은 마이크로소프트가 개발한 CLI 스크립트 언어를 특징으로 하는 명령어 인터프리터이다. 윈도우 XP 이상에서 사용할 수 있으며 Windows 7부터 기본적으로 설치되어 있다. [2]

기능은 명령 프롬프트와 같으나 COM과 WMI에 대한 완전한 접근이 가능하여 거의 모든 작업(원격지도 포함)을 막힘없이 할 수 있으며 웹 서비스 관리와 CIM으로 원격지의 리눅스와 네트워크 장비를 만질 수도 있다.

PowerShell는 5.1 버전까지는 .NET Framework 기반이었으나 6 버전부터 .NET Core 기반으로 바뀌었다. 이때부터 Windows 뿐만 아니라 리눅스, macOS에도 설치해서 사용할 수 있다. 5.1 버전까지의 PowerShell은 Windows PowerShell로 6 버전 이후의 PowerShell은 PowerShell Core라고 부른다. 7 이후에는 그냥 PowerShell로 부른다. .NET Core와 .NET Framework가 .NET로 통합한 뒤라 Core를 빼버린 것으로 보인다.

Windows 10 버전 1703부터 윈도우의 기본 CLI 셸이 되었다. 물론 설정을 통해 명령 프롬프트로 변경할 수 있다.

PowerShell에 대한 자세한 정보는 아래의 링크를 통해 알 수 있다.
https://docs.microsoft.com/powershell

사실 일반 유저의 경우에는 명령 프롬프트만 사용해도 차고 넘치는 편이나, 가끔씩 인터넷에서 문제 해결 솔루션으로 파워셸 코드를 제공해 주는 경우가 있기 때문에 명령어 공포증이 없다면 파워셸을 남겨 둬도 나쁘지 않다.


2. 기본 탑재[편집]


Windows 7부터 기본적으로 탑재되어 있다. 탑재되는 윈도우 버전와 파워셸 버전은 다음과 같다.

기본 탑재 PowerShell
운영체제
PowerShell 버전
Windows 7
2.0
Windows 8
4.0
Windows 10
5.1
Windows 11
5.1


3. PowerShell Core[편집]


파워셸 6.0부터는 '파워셸 코어'라는 이름으로 크로스 플랫폼[3]을 지원하여 macOS와 여러 리눅스 배포판에서도 이용이 가능하다(기본 설치는 아님). 동시에 오픈소스로 소스가 공개되었다. 파일:GitHub 아이콘.svg저장소 C##으로 짜여 있다.

기존 파워셸과 파워셸 코어의 자세한 차이는 MSDN 참고.


3.1. 설치[편집]


윈도우가 아닌 경우 종속성으로 OpenSSL이 필요할 수 있다.


3.1.1. .NET Core SDK[편집]


닷넷코어가 이미 설치되어 있다면, .NET 글로벌 툴로 설치 가능하다.
dotnet tool install --global PowerShell



3.1.2. Windows[편집]


가장 쉬운 방법으로는 스토어에 올라와 있는 파워셸을 설치하면 된다.

winget을 사용해서도 설치할 수 있다.
winget install --id Microsoft.Powershell --source winget



3.1.3. Mac OS[편집]


brew install --cask powershell

릴리즈 페이지에서 직접 파일을 다운로드 받아서 설치할 때, M1을 사용한다면 ARM64버전을 다운로드 받도록 하자.
sudo installer -pkg <pkg파일> -target /
그 후 위의 방법으로 설치할 수 있다.


3.1.4. Linux[편집]



3.1.4.1. NixOS[편집]

nix-env -i powershell



3.1.4.2. Ubuntu[편집]

# 마이크로소프트의 저장소 GPG 키를 등록하고 패키지 목록을 업데이트한다
sudo dpkg -i <(wget -O - https://packages.microsoft.com/config/ubuntu/$(lsb_release -sr)/packages-microsoft-prod.deb) && sudo apt update
# 설치한다
sudo apt install -y powershell



4. 악성코드[편집]


PowerShell 스크립트로 동작하는 악성코드가 많다. 이런 악성코드를 파일리스(Fileless)라고 부르는데 실행 파일을 사용하지 않고 스크립트 인터프리터를 사용해서 난독화된 스크립트로 악성코드를 실행시키는 기법으로 백신의 악성코드 감지를 피하기 위해 사용한다. 특히 PowerShell는 윈도우에 기본 설치되어 있어서 악성코드나 랜섬웨어에서 많이 사용한다.

그러다보니 함부로 아무 ps 파일이나 실행시켜서는 안된다! 정상적인 스크립트를 수정해서 악성코드를 넣을 수 있기 때문이다. 그래서 스크립트 파일에는 디지털서명이 존재하며 스크립트 파일을 실행하기 전 디지털서명을 확인하여 서명되어 있지 않거나 스크립트 파일이 변조되어 있으면 오류를 표시하고 실행하지 않는다.[4]

또한 PowerShell는 스크립트 실행 전 AMSI[5]를 통해 악성코드 검사를 거친 후에 문제가 없다면 실행되도록 하고 있다.


5. 기타[편집]


Bash, zsh등과 같은 POSIX 에서 주로 쓰이는 셸이나 자사의 명령 프롬프트등과 비교하면 가장 복잡하고 장황한(Verbose) 문법을 가지고 있는데 명령어를 하나씩 뜯어 보면
Get-
,
Set-
접두사등과 같이 명령어가 어떤 특성의 명령어인지 한번에 알 수 있게 하려고 한 모습이 보이나 이를 감안해도 개별 명령어들이 상당히 긴 편이다.

예를 들어 디렉터리의 내용을 표시하는
ls
의 경우 Powershell에선 Alias가 존재하긴 하나 실 명령어는
Get-ChildItem
인 등 자동완성 없이는 타이핑이 까다로운 셸 계의 자바라고 불려도 손색 없을 정도의 특성을 가지고 있다.


6. 관련 문서[편집]



파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-02 12:02:23에 나무위키 PowerShell 문서에서 가져왔습니다.

[1] PowerShell 버전 및 Linux 배포판에 따라 호환 여부가 상이함. 참고[2] 기본 탑재되어 있을 경우 시스템 폴더 안에 있다. (예: C:\Windows\System32\WindowsPowerShell\v1.0)[3] 이를 위해 닷넷 코어를 사용한다.[4] 따라서 자기가 만든 ps 파일을 실행하려고 하면 서명되어 있지 않다며 거부한다. 이 경우 실행 정책을 수정하는 방식으로 해결할 수 있다. (Set-ExecutionPolicy)[5] Anti-Malware Scan Interface(안티 멀웨어 검사 인터페이스)의 약자로 Microsoft Defender 또는 서드파티 안티바이러스를 사용하여 스크립트의 악성 여부를 판단한다.