我竟然开始喜欢 PowerShell 了
I can't believe PowerShell is good

作为长期对 Microsoft 软件持怀疑态度的开发者,我过去主要依赖 Bash、Python 或 Node.js 进行自动化任务。然而,在尝试 PowerShell 7 后,我彻底改变了看法。它不仅是跨平台的强大工具,更通过内置的 cmdlets 和面向对象特性,解决了 Bash 脚本中常见的繁琐问题。无论是处理 JSON 数据、调用 API,还是像操作文件系统一样管理 Windows 注册表,PowerShell 都展现出了惊人的简洁与高效。从 Just the Browser 项目到 Tumblr 博客迁移,它让我意识到,即使在不使用 Windows 系统时,PowerShell 依然是自动化脚本的绝佳选择。
你不必分别学习如何操作文件和如何操作注册表键,因为在 PowerShell 中,它们本质上是同一回事。
HN 评论区
70- d3Xt3r
Windows 系统管理员在此。PowerShell 已经很棒很久了,好吧,至少从 v5.1 开始,那时他们终于修复了早期版本中许多令人恼火的问题和限制。我几乎整天都泡在 PowerShell 里——如今我 90% 以上的工作生活都在 PowerShell 中进行。
但我质疑它在其他平台上的实用性,因为让 PowerShell 在 Windows 上很酷的东西,在 Linux 或 macOS 上往往并不起作用。
例如:Get-Service(及相关 cmdlet)。这是一个我在 Windows 上随时使用的非常方便的 cmdlet。在 Linux 上,你可能会指望它能与 systemd 单元配合工作,但不行,Linux 版上根本没有这个命令。Get-NetAdapter、Get-NetTCPConnection、Get-Disk 以及我平时在 Windows 上经常使用的其他许多便捷 cmdlet,统统缺失。
然而,有些 cmdlet 确实存在,比如 Get-Process 或 Get-Uptime 等,所以我不明白为什么许多常用的 Windows cmdlet 没有被移植过来。
另一个令人恼火的怪癖是,*nix 上的 PowerShell 将一些内置别名移交给了原生版本。比如在 Windows 上,我总是用 'ls',因为谁也没时间敲 Get-ChildItem。不幸的是,当我在 *nix 的 PS 中运行它时,它调用的是原生版本。这成了个问题,因为当我把 'ls' 的输出通过管道传给 for循环或其他cmdlet进行进一步处理时,它自然就不起作用了。更糟糕的是,这种“原生还是别名”的决策甚至不一致。比如 'pwd' 实际上运行的是 PowerShell 版本,而 […]
- 3eb7988a1663
我只在别无选择时才用过 PowerShell,但其中相当多的 API 感觉像是由一个从未用过终端的人设计的。好像他们只是勉强完成了任务,从未设想过真实的用例。
当然,我一时想不起具体的例子,但上次我不得不使用它时,发现几个“显而易见”的工作流程比我预期的要 hacky,对于一个从零开始设计的终端语言来说,这让人相当失望。
- 16bitvoid
我个人对于类似任务更喜欢 nushell[0] 胜过 PowerShell。我的主力仍然是 Fish,但我偶尔会用 nushell 交互式地探索结构化数据(比如 JSON 文件,因为我总是记不住 jq 的语法),以及一些我写好的特定 nushell 脚本(例如在 SLURM 管理的 HPC 上查找所有可用的 GPU 节点并以漂亮的表格形式打印),我发现这比写 bash 或 fish 脚本容易得多。
- majkinetor
PowerShell 太棒了,以至于我觉得奇怪它至少在某些 Linux 发行版中没有成为默认(或者没有一个合适的分支/重做版本)。我甚至在一些服务数百万用户的国家项目中使用了它来实现集成特性。拥有一个专为 shell 设计的、非常高效、不需要 IDE 或任何其他东西的正规语言,这真是一种解放。
我用它做各种各样的事情。这里有一个例子,它从我的本地音频文件夹创建 MusicBrainz 收藏集,并在中间解决了浏览器的证明工作量问题:https://github.com/majkinetor/musicbrainz-userscripts/tree/m...
如果非要吹毛求疵的话,性能可以更好,尽管微软在过去几年做了很多工作,而且那也只是理论上,因为我从未真正被性能阻塞过。但如果它也能成为性能怪兽,我想我们就可以停止研究新的 shell,到处都用它了。
JSON 支持太棒了——你不需要像用 jq 那样学习新东西,它就是这么好用。选择数据的功能也很棒,我比用 SQL 更喜欢它。HashTables 用于配置简直史诗级(你拥有真正的语言,不像 YAML 那样)。
那些在 bash 中看起来丑得要死的脚本,在 pwsh 里只有几行,而且非常漂亮。
如果你还没试过,或者没给它一个机会,那你肯定错过了好东西。
- Schlagbohrer
我最近安装了 Powershell 7,因为听说它和 Windows 自带的那个不一样。它很棒,但是,现在我的操作系统里至少有 3 个不同的 Powershell 了?为什么?而且它们的功能差异很大。我不得不更改 Windows 中打开新终端或新 shell 窗口的所有默认设置,因为许多默认设置总是给我加载旧版的 Powershell,直到我的命令和脚本不断报错我才发现,因为它们使用了只存在于 Powershell 7 中的命令。真不敢相信微软决定重蹈 Python 的原罪,创建了多个冲突并存、完全相同却又互不兼容的版本。为什么啊啊啊啊啊
关于这篇文章:Corbin Davenport 是个很棒的名字。文章也不错。