PowerShell이 좋다는 걸 인정할 수밖에 없었다
I can't believe PowerShell is good

Microsoft 제품이라곤 믿지 않던 저자가 PowerShell 7을 접하고 생각이 바뀌었다. Bash 스크립트의 지저분한 보일러플레이트와 외부 도구 의존에서 벗어나, PowerShell은 객체 지향 기반에 JSON 변환, 내장 파라미터 처리, 레지스트리를 가상 드라이브로 다루는 기능까지 제공한다. Mac과 Linux에서도 동작하는 이 도구는 이제 Node.js나 Automator 대신 애용하는 자동화 도구가 됐다.
Bash 스크립트는 단순히 명령을 나열할 때는 괜찮지만, 조금만 복잡해지면 최악이다.
HN 토론
77- d3Xt3r
여기 Windows 시스템 관리자입니다. PowerShell은 오랫동안 훌륭했어요. 적어도 v5.1부터는요. 그때 이전 버전들의 짜증나는 문제와 한계를 많이 고쳤거든요. 저는 하루 종일 거의 PowerShell 안에서 살아요. 요즘 제 업무 생활의 90% 이상이 PowerShell입니다.
하지만 다른 플랫폼에서의 유용성에는 의문이 듭니다. Windows에서 PowerShell을 멋지게 만드는 많은 것들이 실제로 Linux나 macOS에서는 작동하지 않거든요.
예: Get-Service(및 관련 cmdlet). Windows에서 항상 쓰는 아주 편리한 cmdlet이죠. Linux에서는 systemd 유닛과 작동할 거라고 기대하겠지만, 아니요, 그 명령은 Linux 버전에는 없습니다. Get-NetAdapter, Get-NetTCPConnection, Get-Disk 등 Windows에서 항상 쓰는 아주 편리한 cmdlet들도 마찬가지로 모두 빠져 있습니다.
그런데 Get-Process나 Get-Uptime 같은 일부 cmdlet은 존재하니까, 왜 흔히 쓰는 Windows cmdlet들이 이식되지 않았는지 이해가 안 됩니다.
또 다른 짜증나는 특이점은 *nix에서 PowerShell이 일부 내장 별칭을 네이티브 버전으로 넘기는 방식입니다. Windows에서는 Get-ChildItem을 타이핑할 시간이 없어서 항상 'ls'를 쓰거든요. 안타깝게도 *nix PS에서 이걸 실행하면 네이티브 버전이 실행됩니다. 그리고 이게 문제인 게, 'ls'를 for 루프나 다른 cmdlet으로 파이프해서 추가 처리를 하면 당연히 작동하지 않습니다. 설상가상으로 이 네이티브-또는-별칭 결정 방식이 일관성도 없습니다. 예를 들어 'pwd'는 실제로 PowerShell 버전을 실행하는데, […]
- 3eb7988a1663
저는 다른 선택지가 없을 때만 PowerShell을 써봤지만, 꽤 많은 API가 터미널을 한 번도 써본 적 없는 사람이 설계한 것처럼 느껴집니다. 마치 실제 사용 사례를 상상해본 적 없이 마지못해 목표만 채우는 것처럼요.
당연히 당장 예를 들 수는 없지만, 마지막으로 PowerShell을 써야 했을 때 몇몇 "당연한" 워크플로가 깔끔한 새 터미널 언어 설계치고는 예상보다 훨씬 꼼수 같아서 꽤 실망했었습니다.
- 16bitvoid
저는 비슷한 작업에는 PowerShell보다 nushell[0]을 선호합니다. 주로 쓰는 건 여전히 Fish지만, 구조화된 데이터를 대화형으로 탐색할 때(예: jq 문법을 항상 까먹어서 JSON 파일을 볼 때)나 제가 가진 특정 nushell 스크립트(예: SLURM으로 관리되는 HPC에서 GPU가 있는 사용 가능한 모든 노드를 예쁜 표로 출력)를 쓸 때 가끔 nushell을 사용합니다. bash/fish보다 작성하기가 훨씬 쉽더군요.
- majkinetor
PowerShell은 정말 좋아서, 적어도 일부 Linux 배포판에서 기본이 되지 않았다는 게 이상할 정도입니다(혹은 제대로 된 포크/재작업이라도). 저는 수백만 사용자에게 서비스하는 일부 국가 프로젝트의 통합 기능에도 사용했습니다. 셸을 위해 설계된 제대로 된 언어가 있고, 매우 효율적이며, IDE 같은 게 필요 없다는 사실은 꽤 해방감을 줍니다.
저는 온갖 용도로 씁니다. 다음은 제 로컬 오디오 폴더에서 MusicBrainz 컬렉션을 만들면서 그 사이에 브라우저의 작업 증명을 해결하는 예제입니다: https://github.com/majkinetor/musicbrainz-userscripts/tree/m...
트집을 잡자면 성능이 더 나을 수는 있겠지만, MS가 지난 몇 년간 많이 개선했고, 사실 이론상으로만 그렇습니다. 실제로 성능 때문에 막힌 적은 없거든요. 하지만 성능 괴물이 될 수도 있다면, 새로운 셸 연구는 그만두고 어디서나 그냥 이걸 쓰면 되지 않을까 싶습니다.
JSON 지원은 놀랍습니다. jq처럼 새로 배울 게 없고 그냥 작동합니다. 선택 기능도 훌륭해서 SQL보다 더 좋아합니다. 해시테이블은 구성에 최고입니다(예를 들어 YAML과 달리 진짜 언어가 들어 있으니까요).
bash에서는 끔찍해 보이는 스크립트가 pwsh에서는 몇 줄의 아름다운 코드가 됩니다.
아직 안 써봤거나 기회를 주지 않았다면, 분명히 손해 보고 있는 겁니다.
- Schlagbohrer
최근에 PowerShell 7을 설치했는데, Windows에 기본으로 딸려 오는 powershell과는 다른 모양이더군요. 훌륭합니다. 그런데 이제 OS에 PowerShell이 적어도 3개나 있네요? 왜죠? 그리고 그것들은 아주 다르게 작동합니다. 새 터미널이나 새 셸 창을 열 때의 기본값을 전부 바꿔야 했는데, 많은 기본값이 계속 예전 PowerShell 중 하나를 열어줬고, 제 명령과 스크립트가 PowerShell 7에만 있는 명령을 쓰기 때문에 계속 오류가 날 때까지 그걸 몰랐거든요. Microsoft가 Python의 원죄를 따라 해서 똑같은 것의 서로 충돌하고 공존하는 설치본, 그것도 호환되지 않는 다른 버전을 여러 개 만든 게 믿기지 않습니다. 왜애애애애애
기사에 관해서: Corbin Davenport는 정말 멋진 이름이네요. 기사도 좋습니다.