프로그래밍 사이트 선정 프로그래밍 언어 순위 목록 | ||||
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all" {{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;" {{{#!folding [ IEEE Spectrum 2024 ] {{{#!wiki style="margin: -5px 0" | <rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 | 직업 부문 상위 10개 프로그래밍 언어 | ||
1 | Python | 1 | SQL | |
2 | Java | 2 | Python | |
3 | JavaScript | 3 | Java | |
4 | C++ | 4 | TypeScript | |
5 | TypeScript | 5 | SAS | |
6 | SQL | 6 | JavaScript | |
7 | C# | 7 | C# | |
8 | Go | 8 | HTML | |
9 | C | 9 | Shell | |
10 | HTML | 10 | C++ |
}}}
}}}
- [ Stack Overflow 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=#FFA500><tablebgcolor=#fff,#222> 2024년 Stackoverflow 설문조사 기준 인기 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust 2 HTML, CSS 15 Kotlin 3 Python 16 Lua 4 SQL 17 Dart 5 TypeScript 18 어셈블리어 6 Bash 19 Ruby 7 Java 20 Swift 8 C# 21 R 9 C++ 22 Visual Basic 10 C 23 MATLAB 11 PHP 24 VBA 12 PowerShell 25 Groovy 13 Go
- [ TIOBE 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB 2 C++ 12 Delphi / Object Pascal 3 C 13 PHP 4 Java 14 Rust 5 C# 15 Ruby 6 JavaScript 16 Swift 7 SQL 17 Assembly language 8 Visual Basic 18 Kotlin 9 Go 19 R 10 Fortran 20 Scratch {{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"21 COBOL 36 Scala 22 Classic Visual Basic 37 Transact-SQL 23 LISP 38 PL/SQL 24 Prolog 39 ABAP 25 Perl 40 Solidity 26 (Visual) FoxPro 41 GAMS 27 SAS 42 PowerShell 28 Haskell 43 TypeScript 29 Dart 44 Logo 30 Ada 45 Wolfram 31 D 46 Awk 32 Julia 47 RPG 33 Objective-C 48 ML 34 VBScript 49 Bash 35 Lua 50 Elixir
- [ PYPL 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=green><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Objective-C 2 Java 12 Go 3 JavaScript 13 Kotlin 4 C# 14 MATLAB 5 C/C++ 15 PowerShell 6 R 16 VBA 7 PHP 17 Dart 8 TypeScript 18 Ruby 9 Swift 19 Ada 10 Rust 20 Lua
}}} ||
프로그래밍 언어 목록 · 분류 · 문법 |
<colcolor=#153F6E,#FFFFFF> PowerShell | |
플랫폼 | Microsoft Windows | macOS | Linux[1] |
개발 | Microsoft Corporation |
버전 | 7.4.6(stable) / 7.5.0(preview) |
웹사이트 | Docs | GitHub |
[clearfix]
Windows 11 Sun Valley 2의 Powershell 7 |
1. 개요
#!syntax powershell
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 |
Windows XP에서는 KB968930을 설치하면 사용할 수 있다.
3. PowerShell Core
파워셸 6.0부터는 '파워셸 코어'라는 이름으로 크로스 플랫폼[3]을 지원하여 macOS와 여러 리눅스 배포판에서도 이용이 가능하다(기본 설치는 아님). 동시에 오픈소스로 소스가 공개되었다. github C#으로 짜여 있다.기존 파워셸과 파워셸 코어의 자세한 차이는 MSDN 참고.
3.1. 설치
윈도우가 아닌 경우 종속성으로 OpenSSL이 필요할 수 있다.3.1.1. .NET Core SDK
닷넷코어가 이미 설치되어 있다면, .NET 글로벌 툴로 설치 가능하다.#!syntax sh
dotnet tool install --global PowerShell
3.1.2. Windows
가장 쉬운 방법으로는 스토어에 올라와 있는 파워셸을 설치하면 된다.winget을 사용해서도 설치할 수 있다.
#!syntax sh
winget install --id Microsoft.Powershell --source winget
3.1.3. macOS
#!syntax sh
brew install --cask powershell
릴리즈 페이지에서 직접 파일을 다운로드받아서 설치할 때, Apple Silicon Mac을 사용한다면 ARM64 버전을 다운로드받도록 하자.
#!syntax sh
sudo installer -pkg <pkg파일> -target /
그 후 위의 방법으로 설치할 수 있다.3.1.4. Linux
3.1.4.1. NixOS
#!syntax sh
nix-env -i powershell
3.1.4.2. Ubuntu
#!syntax sh
# 마이크로소프트의 저장소 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]를 통해 악성코드 검사를 거친 후에 문제가 없다면 실행되도록 하고 있다.
마소에서는 부분적으로 삭제를 지원하고 있다. 방법이 조금 까다로운데, 프로그램 추가 / 제거 선택메뉴에서, Windows 기능 켜기 / 끄기 기능을 누르면 가능하다. 다만, 이 기능을 활성화 시키기 위해서는 Windows Modules Installer 를 구동해야 한다. 이 모듈이 작동해야, 최근에 설치된 선택적 업데이트도 삭제가 가능해진다는 건 단점. 단, 윈도우 자체의 구성요소를 건드리는 것이기 때문에, 한번 삭제하면 영원히 복구 할 수 없다는 것을 알아 둘 필요는 있다. 게임만 하는 요량이라면 어차피 복잡하게 악성코드니 뭐니 하는 것에 신경 쓸 필요가 없는것이다. 백신만 업데이트 제대로 하고, 검사만 정기적으로 하면 아무런 문제가 없다. 대부분의 악성 스크립트는 불법적인 사이트에 들어가서 감염되는 것이기 때문이다.
5. 기타
Bash, zsh 등과 같은 POSIX 에서 주로 쓰이는 셸이나 자사의 명령 프롬프트등과 비교하면 가장 복잡하고 장황한(Verbose) 문법을 가지고 있는데 명령어를 하나씩 뜯어 보면Get-
, Set-
접두사등과 같이 명령어가 어떤 특성의 명령어인지 한번에 알 수 있게 하려고 한 모습이 보이나 이를 감안해도 개별 명령어들이 상당히 긴 편이다.예를 들어 디렉터리의 내용을 표시하는
ls
의 경우 Powershell에선 Alias가 존재하긴 하나 실 명령어는 Get-ChildItem
인 등 자동완성 없이는 타이핑이 까다로운 셸 계의 자바라고 불려도 손색 없을 정도의 특성을 가지고 있다.5.1. 테마
기본적인 모습이 심히 못 생겼다(...)는 단점이 있지만[6], oh-my-posh라는 테마 설치로 극복할 수 있다.6. 관련 문서
[1] PowerShell 버전 및 Linux 배포판에 따라 호환 여부가 상이함. 참고[2] 기본 탑재되어 있을 경우 시스템 폴더 안에 있다. (예: C:\\Windows\\System32\\WindowsPowerShell\\v1.0)[3] 이를 위해 닷넷 코어를 사용한다.[4] 따라서 자기가 만든 ps 파일을 실행하려고 하면 서명되어 있지 않다며 거부한다. 이 경우 실행 정책을 수정하는 방식으로 해결할 수 있다. (Set-ExecutionPolicy)[5] Anti-Malware Scan Interface(안티 멀웨어 검사 인터페이스)의 약자로 Microsoft Defender 또는 서드파티 안티바이러스를 사용하여 스크립트의 악성 여부를 판단한다.[6] 명령 프롬프트 인터페이스랑 거의 비슷하나, 명령 프롬프트의 인터페이스가 거의 모든 사람에게 더 익숙해서 이 점이 부각된다. 그나마 Windows 11에서 Windows Terminal로 통합된 뒤에는 CLI 치고는 깔끔한 인터페이스로 변화했다.