![适用于多服务器管理员的可移植脚本语言?](https://linux22.com/image/504972/%E9%80%82%E7%94%A8%E4%BA%8E%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%91%98%E7%9A%84%E5%8F%AF%E7%A7%BB%E6%A4%8D%E8%84%9A%E6%9C%AC%E8%AF%AD%E8%A8%80%EF%BC%9F.png)
请注意:便携式,如 portableapps.com 中的,不是传统定义。最初发布在 stackoverflow.com 上,根据另一位用户的建议在这里询问。
我是一名 DBA 和系统管理员,主要负责运行 SQL Server 的 Windows 计算机。我正在寻找一种适用于 Windows 的编程/脚本语言,它不需要管理员访问权限或安装程序,除了将其展开到文件夹中外,不需要任何安装过程。我的目的是拥有一种可以标准化的自动化语言。
到目前为止,我一直在使用批处理文件和 Unix shell 的组合,使用 sh.exeUnx工具类但这远非完美的解决方案。
我评估过一些选项,它们都至少存在一个或另一个严重缺陷。我非常偏爱开源或双重许可,但我更感兴趣的是找到合适的工具。我对任何依赖 Cygwin 或 Java 的东西都不感兴趣,但目前我对需要 .NET 的东西很满意。
要求:
- 可管理的占用空间(1-100 个文件,安装后占用空间不到 30 MB)
- 在 Windows XP 和 Server (2003+) 上运行
- 无安装程序(exe、msi)
- 与外部管道、进程和文件配合使用
- 支持 MS SQL Server 或 ODBC 连接
奖励积分:
- 开源
- 用于调用本机 DLL 中的函数的 FFI
- GUI 支持(本机或 gtk、wx、fltk 等)
- Linux、AIX 和/或 OS X 支持
- 动态、面向对象和/或功能性、解释或字节码编译;交互式开发
- 能够将脚本打包或编译为可执行文件
到目前为止我已经尝试过:
- Ruby:磁盘空间 148 MB,文件 23000 个
- 可移植 Python:磁盘空间 54 MB,2800 个文件
- Strawberry Perl:磁盘空间 123 MB,3600 个文件
- REBOL:很棒,除了闭源且免费版本没有 MSSQL 或 ODBC
- Squeak Smalltalk:很棒,除了对脚本的支持不佳
---- 删减:澄清要点 ----
为什么会有这么多限制?
我意识到我的一些标准似乎过于武断。这主要是我的环境产品。我在一家大公司的一个部门担任 SQL Server DBA 和备份 Unix 管理员。除了近百台在 Windows 上运行某个版本的 SQL Server 的机器外,我还支持现场一千多台机器上安装的 SQL Server Express Edition。
由于我们的安全政策,我没有在每台机器上登录的权限。通常情况下,出现问题后,我会在一段时间内被授予本地管理员权限。通常情况下,这是我从未接触过的机器,而且我还没有设置自己的环境。
我可能对该盒子拥有临时管理员权限,但我没有这机器管理员 - 我只是 DBA。我无意冒犯 Windows 管理员,也不想接管他们的任何职责。
如果我提到“安装”某样东西,生产控制和 Windows 管理员会突然对此产生兴趣;如果我复制脚本,没人会介意。这种区别对读者来说可能意义不大,但如果有人误解了,我就会突然需要等待很长时间并花费大量开销才能安装工具并解决问题。
这就是为什么我想要一些可以以便携式应用程序的方式复制和运行的东西。那么占用空间小呢?我的公司有三个部门,每个部门位于不同的地理位置,其中一个是新收购的。我们在每个部门都有不同的生产控制/安全策略。我支持这三个部门的 MSSQL 数据库。现场机器分布在美国各地,有时通过非常慢的链接连接到 VPN。通过这些连接安装 Ruby \using psexec 花费了很长时间。在这些情况下,更大的时间浪费似乎是包含成千上万个文件的档案,而不是它们的庞大规模。
你可以说我被 Unix 宠坏了,那里的管理员通常至少安装了一些现代脚本语言;我会使用 PowerShell,但我对它不太了解,更重要的是,它并不存在于我需要工作的地方。
我经常需要在某台我从未登录过的机器上短时间内编写、部署和执行一些脚本。由于需要审批、时间和 Windows 管理员的人力,在每台我需要接触的机器上安装 Ruby 或类似的东西实际上是不可能的,所以我更愿意找到一个允许我按照自己的方式工作的解决方案。
答案1
就今天的存储容量而言,为什么“可管理空间”如此之小(文件数量为什么重要)?我个人偏爱 Perl,它唯一的缺点是大小。事实上,如果您在单个 AD 中,您可以将 ActiveState Perl 安装到 UNC 路径,并从任何机器访问该 UNC 路径,这样您就不必在所有其他机器上安装任何东西。
使用 Perl2EXE,您可以将任何内容打包成 EXE,但这并不优雅或节省空间。
此外,除了您想要的非 Windows 兼容性之外,PowerShell 还可以满足您的要求,只是它需要在没有安装程序的情况下运行。老实说,您不妨将其视为操作系统的可选部分,并将其添加到您的标准环境中(如果您可以控制环境的话)。
这就是我的两个建议。
答案2
我认为它不能满足您的所有要求(SQL Server \ ODBC 方面,这显然很关键),但我有一个古老的(日期戳是 1996 年)Perlv4 exe,我随身携带,无论何时我只想做一些快速而讨厌的事情。379k - 1 个文件,无需安装,可在我尝试过的每个 Windows 操作系统上运行。
答案3
我认为 vbscript/jscript 是现有 2003 环境的最佳选择。如果您可以稍微调整一下规格以允许安装,那么 powershell 就是未来的选择,特别是因为 powershell 目前可用,并且将用于 sql 管理。如果您真的想要可移植性(坦率地说,这意味着您的脚本编写潜力仅限于解析文本文件和文件名中的字符串),那么我认为您的下一个最佳选择是 perl。Perl 不需要在 Windows 上安装即可运行。请注意,如果您只想要 unix 命令,则不需要 unxutils,只需安装 unix 子系统的服务即可。
话虽如此,我认为您的前提是有缺陷的。我想不出我想要“标准化”自动化语言的理由,因为 *nix 和 Windows 任务的任务要求将需要截然不同的编码类型。例如,对于 Windows 中的许多系统任务,您将使用 WMI 调用。WMI 在 *nix 上不可用。(是的,我知道 CIM 可用,但它不一样)。即使是文件名路径等简单的东西也会以不同的方式解析和编写。我建议使用最适合手头工作的工具,而不是试图将不可避免的方形木桩打入圆孔。