我正在决定要用于一个简单脚本的编程语言,该脚本将发出 HTTP 请求检查可用更新,如果可用则下载更新并执行程序。在 MacOS 和所有 Linux 发行版上,我可以放心地打赌,某些版本的 python 将在系统上可用 - 如果 Linux 发行版没有附带 python,我可以放心地假设这种利基操作系统的用户将知道如何安装它。
但对于 Windows,我知道它没有开箱即用的 python、jre,甚至没有用于运行 CLR 语言的运行时库。除了 Powershell 之外还有其他我可以使用的吗?
该程序以 ZIP 文件的形式针对 Windows 进行分发,并且是可移植的(无需安装程序)。这就是为什么我希望该语言已经在用户系统上可用。
如果您可以发布已编译的程序,那么您就不需要通用语言 - 您首先已经在编写程序了;使用相同的方法在主 App.exe 旁边编写 Updater.exe。
一般来说,PowerShell 将是您的最佳选择。它在 .NET CLR 上运行,介于 Bash 和 C# 之间——该语言主要是为“shell 脚本”类型的工作而构建的,但您可以完全访问所有标准 .NET 类(以及 COM 和 WMI/CIM) ),
Add-Type
如果您最终需要 P/Invoke,甚至可以使用内联 C# 代码。Invoke-RestMethod
( )有一个内置的 HTTP 客户端, ( )irm
下有一个稍有不同的 HTTP 客户端;其中之一可以解析 JSON 和 XML。要显示消息,您可以使用以下命令调用 .NET WinForms:Invoke-WebRequest
iwr
所有相当新的 Windows 版本都包括“Windows PowerShell”版本 5。它缺乏一些细节,例如缺少 Invoke-WebRequest 的一些选项,但在其他方面与现代 PowerShell 7 几乎相同。
唯一的缺点是 PowerShell 脚本总是显示控制台窗口;迄今为止还没有同等
pythonw.exe
或类似的东西。(说来话长。)所有其他选项都稍差一些:
slmgr.vbs
. 某些公司系统可能会禁用它,但它们同样可能会禁用 PowerShell。curl.exe
使用Windows 10 内置的批处理脚本。 (我会使用 Nirsoft 的 nircmd.exe 来显示弹出消息,但没有什么可以阻止您echo
将 VBScript 转换为 %TEMP% 或其他内容。)唯一可以指望存在于每个现代 Windows 版本中的语言是:
Batch 是一种非常古老的语言,具有多种特性,但可以完成大多数工作(或多或少)。用于复杂的操作可能会非常痛苦。
PowerShell 更新得多,但它的语法是全新的(几乎每个问题都可以在互联网上找到示例)。它的学习曲线更陡峭,但可以执行非常多的操作,比 Batch 更广泛。某些操作需要从互联网安装附加模块,这可能会对您的分布式脚本产生负面影响。
VBScript 也许是更熟悉的类似语言,而且也非常古老。微软希望看到它被弃用。然而,使用它编写的软件如此之多,以至于它似乎不太可能在未来(或永远)消失。