[include(틀:프로그래밍 언어)] ||<:><-2> {{{#!wiki style=" font-size: 32px; font-family: Segoe UI, SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif; font-weight: bold" PowerShell}}}|| ||<-2> {{{#!wiki style="margin: -5px -10px; background-image: linear-gradient(135deg, #131d29, #203248)" [[파일:ps_black_128.svg|width=60%]] }}} || || 플랫폼 ||[[Microsoft Windows]], [[macOS]], [[Linux]][* PowerShell 버전 및 Linux 배포판에 따라 호환 여부가 상이함. [[https://learn.microsoft.com/ko-kr/powershell/scripting/install/installing-powershell-on-linux|참고]]] || || 개발 ||[[Microsoft|Microsoft Corporation]] || || 버전 ||[[https://github.com/PowerShell/PowerShell/releases|최신버전]] || || 웹사이트 ||[[https://microsoft.com/PowerShell|Docs]], [[https://github.com/powershell|GitHub]] || [목차] [clearfix] || {{{#!wiki style="margin: -5px -10px" [[파일:Powershell 7.3.1.png|width=100%]]}}} || ||[[Windows Terminal]]으로 구동한 Powershell 7 || == 개요 == {{{#!syntax powershell Write-Host 'Hello, World!' }}} [[Microsoft Windows|Windows]] PowerShell은 [[마이크로소프트]]가 개발한 [[CLI]] [[셸(컴퓨터)|셸]] 및 [[스크립트 언어]]를 특징으로 하는 명령어 [[인터프리터]]이다. [[윈도우 XP]] 이상에서 사용할 수 있으며 [[Windows 7]]부터 기본적으로 설치되어 있다. [* 기본 탑재되어 있을 경우 [[시스템 폴더]] 안에 있다. (예: C:\Windows\System32\WindowsPowerShell\v1.0)] 기능은 [[명령 프롬프트]]와 같으나 COM과 WMI에 대한 완전한 접근이 가능하여 거의 모든 작업(원격지도 포함)을 막힘없이 할 수 있으며 웹 서비스 관리와 CIM으로 원격지의 [[Linux|리눅스]]와 네트워크 장비를 만질 수도 있다. 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/버전/Redstone 2|Windows 10 버전 1703]]부터 윈도우의 기본 CLI 셸이 되었다. 물론 설정을 통해 [[명령 프롬프트]]로 변경할 수 있다. PowerShell에 대한 자세한 정보는 아래의 링크를 통해 알 수 있다. [[https://docs.microsoft.com/powershell]] 사실 일반 유저의 경우에는 명령 프롬프트만 사용해도 차고 넘치는 편이나, 가끔씩 인터넷에서 문제 해결 솔루션으로 파워셸 코드를 제공해 주는 경우가 있기 때문에 명령어 공포증이 없다면 파워셸을 남겨 둬도 나쁘지 않다. == 기본 탑재 == [[Windows 7]]부터 기본적으로 탑재되어 있다. 탑재되는 윈도우 버전와 파워셸 버전은 다음과 같다. ||<-2> 기본 탑재 PowerShell || || 운영체제 || PowerShell 버전 || || Windows 7 || 2.0 || || Windows 8 || 4.0 || || Windows 10 || 5.1 || || Windows 11 || 5.1 || == PowerShell Core == 파워셸 6.0부터는 '파워셸 코어'라는 이름으로 [[크로스 플랫폼]][* 이를 위해 [[닷넷 코어]]를 사용한다.]을 지원하여 [[macOS]]와 여러 [[Linux|리눅스]] [[Linux/배포판|배포판]]에서도 이용이 가능하다(기본 설치는 아님). 동시에 [[오픈소스]]로 소스가 공개되었다. [[https://github.com/PowerShell/PowerShell|[[파일:GitHub 아이콘.svg|width=22]]저장소]] [[C##]]으로 짜여 있다. 기존 파워셸과 파워셸 코어의 자세한 차이는 [[https://docs.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell|MSDN]] 참고. === 설치 === 윈도우가 아닌 경우 종속성으로 [[OpenSSL]]이 필요할 수 있다. ==== [[.NET#s-4|.NET Core]] SDK ==== 닷넷코어가 이미 설치되어 있다면, [[https://docs.microsoft.com/dotnet/core/tools/global-tools|.NET 글로벌 툴]]로 설치 가능하다. {{{#!syntax sh dotnet tool install --global PowerShell }}} ==== [[Windows]] ==== 가장 쉬운 방법으로는 [[https://www.microsoft.com/p/powershell/9mz1snwt0n5d|스토어]]에 올라와 있는 파워셸을 설치하면 된다. [[winget]]을 사용해서도 설치할 수 있다. {{{#!syntax sh winget install --id Microsoft.Powershell --source winget }}} ==== [[Mac OS]] ==== {{{#!syntax sh brew install --cask powershell }}} [[https://github.com/PowerShell/PowerShell/releases|릴리즈 페이지]]에서 직접 파일을 다운로드 받아서 설치할 때, [[M1]]을 사용한다면 [[ARM64]]버전을 다운로드 받도록 하자. {{{#!syntax sh sudo installer -pkg -target / }}}그 후 위의 방법으로 설치할 수 있다. ==== [[Linux]] ==== ===== [[NixOS]] ===== {{{#!syntax sh nix-env -i powershell }}} ===== [[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 }}} == [[악성코드]] == PowerShell 스크립트로 동작하는 악성코드가 많다. 이런 악성코드를 파일리스(Fileless)라고 부르는데 실행 파일을 사용하지 않고 스크립트 인터프리터를 사용해서 난독화된 스크립트로 악성코드를 실행시키는 기법으로 백신의 악성코드 감지를 피하기 위해 사용한다. 특히 PowerShell는 윈도우에 기본 설치되어 있어서 악성코드나 랜섬웨어에서 많이 사용한다. 그러다보니 함부로 아무 ps 파일이나 실행시켜서는 안된다! 정상적인 스크립트를 수정해서 악성코드를 넣을 수 있기 때문이다. 그래서 스크립트 파일에는 디지털서명이 존재하며 스크립트 파일을 실행하기 전 디지털서명을 확인하여 서명되어 있지 않거나 스크립트 파일이 변조되어 있으면 오류를 표시하고 실행하지 않는다.[* 따라서 자기가 만든 ps 파일을 실행하려고 하면 서명되어 있지 않다며 거부한다. 이 경우 실행 정책을 수정하는 방식으로 해결할 수 있다. (Set-ExecutionPolicy)] 또한 PowerShell는 스크립트 실행 전 AMSI[* '''A'''nti-'''M'''alware '''S'''can '''I'''nterface(안티 멀웨어 검사 인터페이스)의 약자로 [[Microsoft Defender]] 또는 서드파티 안티바이러스를 사용하여 스크립트의 악성 여부를 판단한다.]를 통해 악성코드 검사를 거친 후에 문제가 없다면 실행되도록 하고 있다. == 기타 == [[Bash]], zsh등과 같은 [[POSIX]] 에서 주로 쓰이는 셸이나 자사의 [[명령 프롬프트]]등과 비교하면 가장 복잡하고 장황한(Verbose) 문법을 가지고 있는데 명령어를 하나씩 뜯어 보면 {{{Get-}}}, {{{Set-}}} 접두사등과 같이 명령어가 어떤 특성의 명령어인지 한번에 알 수 있게 하려고 한 모습이 보이나 이를 감안해도 개별 명령어들이 상당히 긴 편이다. 예를 들어 디렉터리의 내용을 표시하는 {{{ls}}}의 경우 Powershell에선 Alias가 존재하긴 하나 실 명령어는 {{{Get-ChildItem}}}인 등 자동완성 없이는 타이핑이 까다로운 셸 계의 자바라고 불려도 손색 없을 정도의 특성을 가지고 있다. == 관련 문서 == * [[명령 프롬프트]] * [[윈도우 터미널]] [[분류:Microsoft Windows]]