Windows XP脚本编写建议:WSH与PowerShell的比较

10

在Unix/Linux开源世界里进行了大量的脚本编写经验,使用了像Bourne Shell、Perl、Python和Ruby等语言。现在我发现自己需要进行一些Windows XP管理脚本编写。遗留环境似乎是Windows Script Host(WSH),可以使用各种脚本语言,但主要语言是基于COM对象的VBScript。不过未来似乎是基于.NET的Windows PowerShell。

我自70年代的Applesoft以来就没有学过Basic了,所以不想学习VBScript,尽管我已经学会了足够的内容来编写一个小的网络驱动器挂载脚本。如果我要花时间真正去学习它,我会更倾向于投资我的时间在.NET PowerShell环境中,如果它真的是未来的话。几年前,我做过一些C# Windows Forms编程,所以我有一些对.NET的了解,这也使得PowerShell很有吸引力。

明白没有人有水晶球能够预测Microsoft的未来,我想听听任何一个PowerShell用户认为它值得,或者是否有任何人知道PowerShell的严重缺点,并建议我远离它。

更新:最终我使用WSH/VBScript编写了一个特定的脚本,我将它安装为用户的Windows XP工作站的启动脚本。我所要做的就是将它复制到他们的启动文件夹中,然后我就完成了。不过,我只学会了足以完成这一项任务所需的WSH内容。我很高兴看到PowerShell是未来的方向,当我有更复杂的脚本编写任务时,我会转向PowerShell。

6个回答

16
它是否"值得"?
绝对是的。以下是一些原因:
  1. 越来越多的Microsoft产品基于PowerShell,例如Exchange Server 2007、SQL Server 2008等
  2. PowerShell可以访问Microsoft .NET。
  3. 易于学习-您只需要几个命令即可探索PowerShell的功能-e.g.) Get-Command、Get-Help、Get-Member等。
  4. 大多数命令都有别名并以类似于DOS或*NIX shell命令的方式映射,例如"ls"和"dir"是"Get-ChildItem"的别名,"cd"是"Set-Location"的别名。
  5. 它是一个伟大的开发人员工具-由于PowerShell可以访问.NET库,因此您可以在PowerShell中原型化一些.NET功能。
  6. 您可以像文件系统一样浏览注册表、证书、环境变量等-您使用与 FileSystem 相同的命令进行浏览-e.g. ) cd HKLM:\
缺点:
  1. PowerShell 版本 1.0 不支持 Remoting(2.0 支持)以及创建新线程(使用 System.Threading.Thread,但将在2.0中支持后台作业)
  2. 如果不习惯基于 C# / Java 的语言,则学习曲线可能很长
  3. 很难创建通用的 .NET 对象
    • 例如) 创建通用的 List<int> 集合如下:

$l = new-Object System.Collections.Generic.List``1[[System.Int32]]


13

Powershell是IT技术方面非常值得探索的工具,如果你想要展望未来,它绝对是一个不错的选择。但在Windows 7之前的旧版本系统上需要单独安装Powershell,这可能会使WSH成为更有吸引力的目标,因为它只需要部署可以运行而无需进一步依赖的脚本。此外,像XP这样的古老Windows版本并没有包含.NET,这进一步提高了门槛。

然而,如果您对.NET有一定了解,您应该会发现Powershell相当直观易用。特别是在Windows Server环境中,几乎所有新发布的服务器组件都带有自定义Powershell cmdlet,因此Powershell似乎很快成为命令行管理的默认选择。所以Powershell似乎是微软希望长期跟随的道路。我的意思是,他们甚至还没有放弃COM,所以我期望Powershell至少还能再活上十年,因为他们将其定位为管理任务自动化和脚本编写的环境。

此外,我发现基于对象的管道虽然需要一些时间来适应,但最终是非常强大且易用的。它确实简化了许多在*nix上需要用sed/awk实现的事情。

话虽如此,我仍然会为很多应该在Windows上运行且不需要更多依赖的东西使用Windows批处理文件,但这只是我的一个习惯而已 :)


非常感谢。这帮了大忙! - Greg Graham

3

WSH的主要优点是自Windows 98甚至可能是Windows 95以来就已默认安装,但随着PowerShell现在随Server 2008一起提供,并且可以在XP之后的任何系统上安装,这已经不再是一个问题。

如果您完全控制脚本将在其上运行的服务器,我建议使用PowerShell。


2
我已经寻找了很长一段时间的Windows最佳脚本语言(现在仍然),但是在看到所有变体之后,我最终选择了WSH的JScript。虽然PowerShell显然有优势,但第一篇帖子中的优势似乎不太重要(除了内置IDE之外)。然而,缺点还没有完全列出:
  1. 在运行脚本之前,必须手动启用运行脚本的可能性,这使得在分布式网络上部署变得比使用WSH更加困难。
  2. 命令名约定。它不是camelCase,也不是python_tail。这让我感觉非常不舒服。
  3. 变量名以$开头(我认为这是Perl风格?不太确定)-同样不适合我。
  4. 无法使用相对路径来运行脚本。
与此相反,JScript更像C语言,不需要显式启用脚本运行,可以接受相对路径,区分大小写且松散类型化(这两个都是IMHO脚本语言的优势,与VBScript相比)。 我对PowerShell的了解不多,只知道我在MS Technet和网络周围发现的内容。
所以,我拒绝PowerShell的两个主要原因是:1)您必须在每台机器上手动启用运行脚本的可能性,2)一般的非C样式视图,这是我习惯的(不仅是我,我想)。

另一个选择是使用 Node https://nodejs.org/dist/latest/win-x86/ ,它可能运行比 Jscript 更更新的 JavaScript。 - barlop

1
如果可能的话,请使用PowerShell和内联C#,否则可以使用WSH或msdos-batch。

1

现在我们已经到了2017年,在回顾过去时,我认为Powershell是一个不错的选择。


WSH已经过时了吗?我正在尝试了解它目前的作用。 - Milind R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接