Windows XP 脚本、WSH 与 PowerShell 的建议
Posted
技术标签:
【中文标题】Windows XP 脚本、WSH 与 PowerShell 的建议【英文标题】:Advice for Windows XP Scripting, WSH versus PowerShell 【发布时间】:2010-10-17 21:33:23 【问题描述】:在 Unix/Linux 开源世界中使用 Bourne Shell、Perl、Python 和 Ruby 等语言编写脚本后,我现在发现自己需要编写一些 Windows XP 管理脚本。旧环境似乎是 Windows Script Host (WSH),它可以使用各种脚本语言,但主要语言是 VBScript,并且基于 COM 对象。但是,未来似乎是基于 .NET 的 Windows PowerShell。
自 1970 年代 Applesoft 以来,我还没有学过 Basic,所以我并不热衷于学习 VBScript,尽管我确实学会了编写一个小脚本来安装网络驱动器。如果我要花时间真正了解这一点,我倾向于将时间投入到 .NET PowerShell 环境中,如果它真的是未来的话。几年前我做过一些 C# Windows 窗体编程,所以我对 .NET 有一定的了解,这也让 PowerShell 很有吸引力。
了解没有人拥有预测 Microsoft 未来的水晶球,我想听听任何 PowerShell 用户并认为值得的人,或者是否有人知道 PowerShell 的严重缺陷,并建议我远离它。
更新:我最终将 WSH/VBScript 用于我作为启动脚本安装在用户的 Windows XP 工作站上的特定脚本。我所要做的就是将它复制到他们的启动文件夹中,我就完成了。但是,我只学到了足够的 WSH 来完成这项工作。我很高兴看到 PowerShell 是未来,当我有更复杂的脚本任务时,我会转向 PowerShell。
【问题讨论】:
【参考方案1】:“值得”吗?
当然。以下是一些原因。
-
越来越多的 Microsoft 产品基于 PowerShell - 例如。 Exchange Server 2007、SQL Server 2008 等
PowerShell 可以访问 Microsoft .NET。
易于学习 - 您只需几个命令即可探索 PowerShell 的功能 - 例如)Get-Command、Get-Help、Get-Member 等。
大多数命令的别名和映射方式类似于 DOS 或 *NIX shell 命令 - 例如)“ls”和“dir”是“Get-ChildItem”的别名,“cd”是“Set-位置”
这是一款出色的开发人员工具 - 由于 PowerShell 可以访问 .NET 库,因此您可以在 PowerShell 中对一些 .NET 功能进行原型设计
您可以像在文件系统中一样浏览注册表、证书、环境变量等 - 您可以使用在 FileSystem 中使用的相同命令进行浏览 - 例如)cd HKLM:\
缺点:
-
PowerShell 1.0 版不支持远程处理(在 2.0 中支持)和创建新线程(使用 System.Threading.Thread,但在 2.0 中将支持后台作业)
如果您不习惯基于 C#/Java 的语言,学习曲线可能会很长
很难创建通用 .NET 对象
例如)创建一个通用的
List<int>
集合如下
$l = new-Object System.Collections.Generic.List``1[[System.Int32]]
【讨论】:
谢谢,这也很有帮助。【参考方案2】:如果您倾向于向前看,Powershell 绝对是要走的路,但它必须在 7 之前的 Windows 上单独安装,如果您只想部署无需进一步依赖即可运行的脚本,这可能会使 WSH 成为更有吸引力的目标。此外,.NET 还没有包含在 XP 等古老的 Windows 版本中,这进一步提高了标准。
但是,如果您接触过 .NET,您应该会发现 Powershell 非常直观。尤其是在 Windows Server 环境中,它似乎很快成为命令行管理的默认设置,因为几乎所有新发布的服务器组件都附带自定义 Powershell cmdlet。因此,Powershell 似乎是他们想要遵循一段时间的微软之路。哎呀,到目前为止,他们甚至没有埋葬 COM,所以我预计 Powershell 至少还能再活十年,因为他们将其定位为 用于管理任务的自动化和脚本环境。
我还发现了一个基于对象的管道,虽然我花了一段时间才习惯它,但最终非常强大且易于使用。当然简化了许多需要在 *nixes 上使用 sed/awk 的事情。
话虽如此,我仍然使用 Windows 批处理文件来处理许多应该在 Windows 上运行而没有任何依赖关系的东西,但这只是我的一个肮脏习惯 :)
【讨论】:
非常感谢。这是一个很大的帮助!【参考方案3】:WSH 的主要优点是它从 Windows 98 开始默认安装,甚至可能是 Windows 95,但由于 PowerShell 现在随 Server 2008 一起提供,并且可以安装在 XP 之后的任何设备上,因此问题变得越来越小。
如果您可以完全控制运行脚本的服务器,我建议您使用 PowerShell。
【讨论】:
【参考方案4】:很长一段时间以来,我一直在寻找一种最佳的 Windows 脚本语言(现在仍在寻找)。但是,在查看了所有变体之后,我最终选择了 JScript for WSH。虽然 Powershell 显然有优势,但第一篇文章的优势似乎并不显着(内置 IDE 除外)。然而,缺点并没有完整列出:
-
在您可以运行脚本之前,您必须手动启用
运行它们的可能性,这使得在分布式上部署
网络比使用 WSH 困难得多。
cmdlet 的命名约定。它不是 camelCase,也不是 python_tail。它真的灼伤了我的眼睛。
变量名称以 $ 开头(我认为是 Perl 样式?不知道确切) - 此处相同。
您不能使用真实路径来运行脚本。
相反,JScript 更像 C,不需要显式启用脚本运行,接受相对路径,区分大小写和松散类型(恕我直言,与 VBScript 相比,两者都是脚本语言的优势)。 我对 PowerShell 的了解不多,只是我在 MS Technet 和网络上发现的。
所以对我来说,我拒绝 powershell 的两个主要原因(即使知道它可能更强大并且 MS 积极支持它)是:1)您必须在每台机器上手动启用脚本运行可能性 2)一般非 C看,我曾经(而且不仅仅是我,我猜)。
【讨论】:
另一个选项是 node nodejs.org/dist/latest/win-x86,它可能会运行比 jscript 更新的 javascript【参考方案5】:如果可能,使用 Posershell 并内联 C#,如果不是 - WSH,不是吗? - msdos 批处理。
【讨论】:
【参考方案6】:现在是 2017 年,事后看来,Powershell 似乎是一个不错的选择,恕我直言。
【讨论】:
WSH 死了吗?我正在尝试了解它目前的角色。以上是关于Windows XP 脚本、WSH 与 PowerShell 的建议的主要内容,如果未能解决你的问题,请参考以下文章