返回

文章详情

我无法相信 PowerShell 是好的

Hacker News2026年10月22日 03:47

微软制作了很多糟糕的软件。这包括 Windows 的许多方面,从主要的电子邮件应用程序是网络包装到无处不在的 Copilot 按钮。因此,当我发现一个在某种程度上改善了我的生活的微软产品时,尤其是它来自 Windows 的时候,我总是感到惊讶。我从来没有太关注 PowerShell,这个命令行 shell 和脚本工具首次出现于 2006 年,并在 Windows 7 发布时成为捆绑应用程序。在我将 Windows 作为主要桌面操作系统使用的时间里,我大多使用命令提示符和批处理脚本,或者在 Windows 子系统中使用 Bash,或者使用 Python 来处理更复杂的任务。现代版的 PowerShell 是跨平台的,也可以安装在 Mac 和 Linux 上。今年早些时候,我需要学习 PowerShell 脚本用于一个与 Windows 相关的项目,我在 Mac 上也尝试过几次。它迅速成为我最喜欢的自动化和脚本工具之一——承担那些我本来会尝试用 Node.js、快捷方式、macOS Automator,或者天哪,Bash 脚本来完成的工作。我现在明白了。即使你不把它用作你的 shell,即使你在 Mac 或 Linux 上,PowerShell 也是很棒的。 撞墙的感觉 在 Linux、macOS 和其他基于 Unix 的环境中,运行一系列命令的最常见方法是使用 Bash 脚本。它们也被称为 shell 脚本,尽管从技术上讲它们并不完全相同,因为它们也被其他 shell(如 Z Shell(zsh))使用。下面是一个示例 Bash 脚本,它会询问你一个媒体 URL,然后使用 yt-dlp 应用程序将其保存为 MP3 音频文件到你的桌面文件夹: #!/bin/bash echo -e "请输入一个 URL: " read url cd ~/Desktop yt-dlp -x --audio-format mp3 "$url" echo "完成!" Bash 脚本适合仅仅运行一系列命令。你可以使用变量和循环,你多次使用的代码可以放在一个函数中,并且还有对数组等数据类型的有限支持。它们有时候也可以在各种硬件和操作系统上运行。对于任何稍微复杂一点的事情,Bash 脚本就很糟糕。几乎没有“内置”函数——对于常见任务,比如文件操作或解析文本,你应该使用 POSIX 命令。除此之外的任何内容都依赖于外部工具,例如 cURL 或 Wget 用于获取网页内容,几种不同的应用程序用于访问剪贴板,还有 jq 用于读取 JSON 数据。你还可能需要用来解析选项和参数的样板代码。制作一个在其他人的计算机上可靠工作的 Bash 脚本也是出乎意料的困难。有些人可能会在不同的 shell 中尝试你的脚本,这些 shell 不以相同的方式解释脚本——这就是为什么安装 Homebrew 的命令专门以调用 bash shell 开始,许多其他工具也使用同样的技巧。有些人可能只安装了 cURL 来获取网页内容,或者只安装了 Wget,或者两者都没有!你不能假设每个系统都具有相同基本的 POSIX 命令集合,甚至没有 sudo 命令,就像我几个月前学到的那样。 Bash 脚本的局限性通常推动我朝向实际的编程语言,即使对于那些并不严格需要它们的任务。Python 可能是最好的替代品,但它缺少大括号让我感到沮丧。我写了很多 JavaScript 代码,所以 Node.js 是一个选择,但我必须到处放置 await 操作符来进行系统操作,并希望在需要更多依赖项时不会安装恶意软件。 嗨,PowerShell 与微软(和谷歌)的许多其他产品一样,PowerShell 实际上是两个有相似名称的不同东西。你应该使用的是 PowerShell 7,也称为 PowerShell Core,这是基于 .NET Core 的现代跨平台版本。另一个是 Windows PowerShell(v5.1 及更早),它基于 .NET Framework,并且没有积极开发。Windows 11 仍然只包括 Windows PowerShell,而不包括 PowerShell 7。在 Windows、Mac 和 Linux 上,PowerShell 7 是免费下载安装的。在我的 Mac 计算机上,我使用 Homebrew 安装了它,然后可以在终端中用 pwsh 运行它。PowerShell 脚本的基本前提与 Bash 脚本没什么不同。它是一个命令列表,可以是由 shell 提供的,也可以是底层系统提供的,并可以根据需要使用附加函数和关键字(如 if、foreach 或 try/catch)。PowerShell 有许多内置命令,称为“cmdlets”(发音为“command-lets”),你可以安装更多或自己创建。它们中的大多数名称是动词-名词对,比如 Set-Location 代替 POSIX 的 cd,Clear-Host 代替 cls,以及 Remove-Item 代替 rm。下面是再次获取 MP3 的脚本,但现在是 PowerShell 脚本: Param( [Parameter(Mandatory = $true)][uri]$url ) Set-Location -Path ~/Desktop yt-dlp -x --audio-format mp3 "$url" Write-Host "完成!" 这个脚本中的酷炫部分是 Param 块,其中使用 PowerShell 的参数功能来定义输入的 URL。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

☕请我喝杯咖啡