我正在争论我是否应该学习PowerShell,还是坚持使用Cygwin/Perl脚本/Unix shell脚本等等。

PowerShell的好处是,没有Cygwin的队友可以更容易地使用脚本;然而,我不知道我是否真的会写那么多通用脚本,或者人们是否会使用它们。

Unix脚本功能如此强大,PowerShell是否足以让我们切换到它呢?

以下是我在PowerShell中寻找的一些具体内容(或等效内容):

grep 排序 uniq Perl (PowerShell与Perl的能力有多接近?) AWK sed File(提供文件信息的命令) 等。


当前回答

当您将PowerShell与Cygwin/Perl/Shell组合进行比较时,请注意PowerShell仅表示该组合的“Shell”部分。

然而,您可以从PowerShell调用任何命令,就像从cmd.exe或Cygwin中调用一样。它没有重新实现指定的函数,当然也不能与Perl相比。

它“只是”一个外壳,但它使编程变得更容易,为。net世界提供了一个舒适的接口。

还要记住,PowerShell需要Windows XP、Windows Server 2003或更高版本,这可能会造成问题,具体取决于您的IT基础设施。

更新:

我不知道我的回答会引发什么样的哲学辩论。

我在这个问题的背景下发布了我的答案:将PowerShell与Cygwin、Perl和Bash进行比较。

PowerShell是一个shell,因为它在内置命令、命令行、用户函数和外部命令(.exe、.bat、.cmd)之间没有语法上的区别。只有在调用中添加名称空间或对象才能调用。net方法。

它的可编程性来源于。net框架,而不是任何特定于PowerShell“语言”的东西。

我想说,一旦Bugzilla或MediaWiki被实现为运行在web服务器上的PowerShell脚本,我相信PowerShell就是一种“脚本语言”。

在那之前,享受比较吧。

其他回答

我已经使用了一些PowerShell来实现脚本自动化。虽然环境看起来比Unix shell考虑得更周到,但实际上使用对象而不是文本流要笨拙得多,而且过去30年开发的许多Unix设施仍然缺失。

Cygwin仍然是我在Windows主机上选择的脚本环境。在完成任务方面,它肯定胜过其他选择。

PowerShell功能非常强大,比Unix shell的标准内置功能更强大(但这只是因为它包含了许多通常分配给子程序的功能)。另外,考虑到你可以用任何。net语言编写小程序,包括IronPython、IronRuby、PerlNet等。或者你可以简单地从PowerShell调用你的Cygwin命令,忽略所有额外的功能,它将类似于Bash, KornShell,或任何…

作为一个从1997年到2010年专注于Windows企业开发的人,显而易见的答案是PowerShell,因为前面给出的所有好的理由(例如,它是微软企业战略的一部分;与Windows/COM/.NET集成良好;使用对象而不是文件提供了一个“更丰富的”编码模型)。出于这个原因,我在过去两年左右的时间里一直在使用和推广PowerShell,并明确地相信我是在遵循“比尔之言”。

然而,作为一个实用主义者,我不再确定PowerShell是一个很好的答案。虽然这是一款出色的Windows工具,并且为填补Windows命令行这一历史性的漏洞提供了非常必要的一步,但我们都看到微软对消费者计算的控制正在下滑,微软似乎越来越有可能面临一场大规模的战斗,以保持其操作系统对未来企业的重要性。

事实上,鉴于我发现我的工作越来越多地处于不同的环境中,我发现目前使用Bash脚本要有用得多,因为它们不仅可以在Linux、Solaris和Mac OS X上工作,而且还可以在cygwin的帮助下在Windows上工作。

因此,如果您相信操作系统的未来是商品化的,而不是垄断的,那么选择一种灵活的开发工具策略,在可行的情况下远离专有工具似乎是有意义的。然而,如果你认为你的未来被所有的雷德蒙德所主宰,那么就选择PowerShell吧。

如果你喜欢shell脚本,你一定会爱上PowerShell!

从微软命令Shell (Ars Technica)的导游之旅开始。

您还可以尝试使用BashWin at在Windows上运行Bash脚本 https://github.com/skanga/BashWin。