PowerShellは実は優れている、Macユーザーの私が認める理由
I can't believe PowerShell is good

Microsoftのソフトはろくなものが少ないと感じてきた筆者が、Windows向けのPowerShell 7をMacで使ってみたところ、自動化の有力な選択肢になったという体験談。Bashスクリプトの面倒な引数処理や外部ツール依存、Node.jsのawait地獄と比べ、Paramブロックによる引数定義、JSONの読み書き、レジストリをファイルのように扱える仮想ドライブなど、組み込み機能の充実ぶりを実例付きで紹介している。
PowerShellは素晴らしい。たとえシェルとして使わなくても、MacやLinuxを使っていても、そう言える。
HNでの議論
75- d3Xt3r
Windowsのシステム管理者です。PowerShellはずっと前から、そうですね、少なくともv5.1で以前のバージョンの厄介な問題や制限の多くがようやく修正されて以来、素晴らしいものでした。私はほぼ一日中これの中で生きています——最近は仕事人生の90%以上がPowerShellです。
しかし他のプラットフォームでの有用性には疑問を感じます。というのも、WindowsでPowerShellをクールにしている要素の多くが、実はLinuxやmacOSでは動かないからです。
例えばGet-Service(および関連するコマンドレット)。Windowsではいつも使っているとても便利なコマンドレットです。Linuxではsystemdのユニットで動くはずだと思うでしょうが、いや、そのコマンドはLinux版には存在しません。Get-NetAdapter、Get-NetTCPConnection、Get-Disk、そしてWindowsでいつも使っている他の多くの便利なコマンドレットも同様に、すべて欠けています。
それでもGet-ProcessやGet-Uptimeなど一部のコマンドレットは存在するので、なぜよく使われるWindowsのコマンドレットの多くが移植されていないのか理解できません。
もう一つの厄介な癖は、*nix上のPowerShellが一部の組み込みエイリアスをネイティブ版に引き渡してしまうことです。WindowsではGet-ChildItemなんて打つ時間は誰にもないので、私はいつも'ls'を使います。残念ながら*nixのPSでこれを実行すると、ネイティブ版が走ります。そしてこれが問題なのは、'ls'をforループや別のコマンドレットにパイプしてさらに処理しようとすると、当然ながら動かないからです。さらに悪いことに、このネイティブかエイリアスかの判断すら一貫していません。例えば'pwd'は実際にはPowerShell版が走るのに、[…]
- 3eb7988a1663
私は他に選択肢がないときにしかPowerShellを使ったことがありませんが、かなりの数のAPIがターミナルを使ったことのない人が設計したように感じられます。まるで実際のユースケースを想像することなく、しぶしぶ目的を果たしているかのようです。
当然ながら、すぐに例を挙げることはできませんが、前回これに手を伸ばさざるを得なかったとき、いくつかの「明らかな」ワークフローが、まっさらな状態から設計されたターミナル言語にしては予想以上に場当たり的に見えたので、かなりがっかりしました。
- 16bitvoid
私は同様のタスクにはPowerShellよりもnushell[0]のほうが個人的に好きです。メインは今もFishですが、構造化データを対話的に探索するとき(例えば、jqの構文をいつも忘れてしまうのでJSONファイルとか)や、自分が持っている特定のnushellスクリプト(例えば、SLURM管理のHPC上でGPUが使えるノードをすべて見つけて綺麗な表として出力するもの)には時々nushellを使います。bashやfishで書くよりずっと簡単だと感じています。
- majkinetor
PowerShellはあまりに優れているので、少なくとも一部のLinuxディストリビューションで(あるいは適切なフォーク/再実装で)デフォルトにならなかったのが不思議なくらいです。私は何百万人ものユーザーにサービスを提供するいくつかの州のプロジェクトで、統合機能のためにこれを使ったことすらあります。シェル用に設計された本物の言語があり、非常に効率的で、IDEなど何も必要としないという事実は、かなり解放感があります。
あらゆることに使っています。こちらは、ローカルのオーディオフォルダからMusicBrainzのコレクションを作成し、その間にブラウザのproof of workを解決する例です:https://github.com/majkinetor/musicbrainz-userscripts/tree/m...
細かいことを言えば、パフォーマンスはもっと良くなるはずです。とはいえMSはここ数年で多くを成し遂げましたし、それも理論上の話で、実際にそれで困ったことはありません。しかしもしパフォーマンスの怪物にもなれたなら、新しいシェルの研究はもうやめて、どこでもこれを使えばいいと思うでしょう。
JSONサポートは素晴らしいです——jqのように新しく何かを学ぶ必要はなく、ただ動きます。要素の選択も素晴らしく、SQLよりも好きです。HashTableは設定用として最高です(YAMLなどと違って、本物の言語が使えますから)。
bashでは恐ろしい見た目になるスクリプトが、pwshでは数行の美しいコードになります。
まだ試していない、あるいはチャンスを与えていないなら、間違いなく損をしていますよ。
- Schlagbohrer
最近Powershell 7をインストールしました。どうやらWindowsに付属しているpowershellとは別物らしいからです。素晴らしいのですが、今やOS上に少なくとも3種類のPowershellがあるのでしょうか?なぜ?しかもそれぞれ動作が大きく異なります。新しいターミナルや新しいシェルウィンドウを開くときのデフォルトを全部変えなければなりませんでした。というのも、多くのデフォルトが古いpowershellのどれかを渡してきて、私のコマンドやスクリプトがエラーを出し続けるまでそれに気づかなかったからです。それらはPowershell 7にしか存在しないコマンドを使っているのですから。MicrosoftがPythonの原罪を真似て、まったく同じものの、しかも互換性のない異なるバージョンが共存する複数のインストールを作るとは信じられません。なぜぇぇぇぇ
記事について:Corbin Davenportは素晴らしい名前ですね。記事もいいです。