10

在 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 Forms 编程,所以我对 .NET 有一定的了解,这也让 PowerShell 很有吸引力。

了解没有人有预测微软未来的水晶球,我想听听任何 PowerShell 用户并认为值得的人,或者是否有人知道 PowerShell 的严重缺陷,并建议我远离从中。

更新:我最终将 WSH/VBScript 用于我作为启动脚本安装在用户的 Windows XP 工作站上的特定脚本。我所要做的就是将它复制到他们的启动文件夹中,我就完成了。但是,我只学到了足够的 WSH 来完成这项工作。我很高兴看到 PowerShell 是未来,当我有更复杂的脚本任务时,我会转向 PowerShell。

4

6 回答 6

16

是否“值得”?

绝对地。这里有很多原因。

  1. 越来越多的微软产品基于 PowerShell - 例如 Exchange Server 2007、SQL Server 2008 等。
  2. PowerShell 可以访问 Microsoft .NET。
  3. 易于学习 - 您只需几个命令即可探索 PowerShell 的功能 - 例如)Get-Command、Get-Help、Get-Member 等。
  4. 大多数命令的别名和映射方式类似于 DOS 或 *NIX shell 命令 - 例如)“ls”和“dir”是“Get-ChildItem”的别名,“cd”是“Set-Location”的别名
  5. 这是一个很棒的开发人员工具 - 由于 PowerShell 可以访问 .NET 库,您可以在 PowerShell 中对一些 .NET 功能进行原型设计
  6. 您可以在注册表、证书、环境变量等中导航,就像它们是文件系统一样 - 您使用在 FileSystem 中使用的相同命令来导航 - 例如)cd HKLM:\

缺点:

  1. PowerShell 1.0 版不支持远程处理(2.0 中支持)和创建新线程(使用 System.Threading.Thread,但将支持 2.0 中的后台作业)
  2. 如果您不习惯基于 C#/Java 的语言,学习曲线可能会很长
  3. 很难创建通用的 .NET 对象
    • 例如)创建一个通用List<int>集合就像下面

$l = 新对象 System.Collections.Generic.List``1[[System.Int32]]

于 2009-04-06T20:27:47.307 回答
13

如果您倾向于向前看,Powershell 绝对是要走的路,但它必须在 7 之前的 Windows 上单独安装,如果您只想部署无需进一步依赖即可运行的脚本,这可能会使 WSH 成为更有吸引力的目标。此外,.NET 还没有包含在 XP 等古老的 Windows 版本中,这进一步提高了标准。

但是,如果您接触过 .NET,您应该会发现 Powershell 非常直观。尤其是在 Windows Server 环境中,它似乎很快成为命令行管理的默认设置,因为几乎所有新发布的服务器组件都附带自定义 Powershell cmdlet。因此,Powershell 似乎是他们想要遵循一段时间的微软之路。哎呀,到目前为止,他们甚至没有埋葬 COM,所以我预计 Powershell 至少还能再活十年,因为他们将其定位为管理任务自动化和脚本环境。

我还发现了一个基于对象的管道,虽然我花了一段时间才习惯它,最终非常强大且易于使用。当然简化了许多在 *nixes 上需要 sed/awk 的事情。

话虽如此,我仍然使用 Windows 批处理文件来处理许多应该在 Windows 上运行而没有任何依赖关系的东西,但这只是我的一个肮脏习惯 :)

于 2009-04-06T19:55:10.023 回答
3

WSH 的主要优点是它从 Windows 98 开始默认安装,甚至可能是 Windows 95,但由于 PowerShell 现在随 Server 2008 一起提供,并且可以安装在 XP 之后的任何设备上,因此它不再是一个问题。

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

于 2009-04-06T20:27:22.970 回答
2

很长一段时间以来,我一直在寻找一种最好的 Windows 脚本语言(现在仍在寻找)。但是,在查看了所有变体之后,我最终选择了 JScript for WSH。虽然 Powershell 显然具有优势,但第一篇文章的优势似乎并不显着(内置 IDE 除外)。但是,缺点并没有完整列出:

  1. 在运行脚本之前,您必须手动启用运行它们的可能性,这使得在分布式网络上进行部署比使用 WSH 更难。
  2. cmdlet 的命名约定。它不是 camelCase,也不是 python_tail。它真的灼伤了我的眼睛。
  3. 变量名以 $ 开头(我认为是 Perl 风格?不知道确切) - 这里也一样。
  4. 您不能使用真实路径来运行脚本。

相反,JScript 更像 C,不需要显式启用脚本运行,接受相对路径,区分大小写和松散类型(恕我直言,与 VBScript 相比,两者都是脚本语言的优势)。我对 PowerShell 的了解不多,只是我在 MS Technet 和网络上发现的。

所以对我来说,我拒绝 powershell 的两个主要原因(即使知道它可能更强大并且 MS 积极支持它)是:1)你必须在每台机器上手动启用脚本运行的可能性 2)一般的非 C 类视图,我曾经(而且不仅仅是我,我猜)。

于 2014-03-12T08:33:20.020 回答
1

如果可能,使用 Posershell 并内联 C#,如果不是 - WSH,不是吗?- msdos 批处理。

于 2013-01-01T17:00:33.227 回答
1

我们现在是 2017 年,事后看来,Powershell 似乎是一个不错的选择,恕我直言。

于 2017-05-18T08:10:26.687 回答