我正在争论我是否应该学习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就是一种“脚本语言”。

在那之前,享受比较吧。

其他回答

工具只是工具。 他们要么帮忙,要么不帮忙。 你需要帮助或者不需要。

如果你知道Unix,并且这些工具能在Windows上做你需要它们做的事情——那么你是一个快乐的家伙,没有必要学习PowerShell(除非你想探索)。

我最初的意图是在Windows中包含一组Unix工具,然后就完成它(我们团队中的许多人都有深厚的Unix背景,并且对该社区非常尊重)。

我发现这并没有多大帮助。原因是AWK/grep/sed不能对抗COM、WMI、ADSI、注册表、证书存储等等。

换句话说,UNIX是一个围绕文本文件自调的完整生态系统。因此,文本处理工具是有效的管理工具。Windows是一个完全不同的生态系统,围绕api和对象进行自我调整。这就是我们发明PowerShell的原因。

我想你会发现,在很多情况下,文本处理并不能在Windows上得到你想要的东西。这时,您将想要选择PowerShell。注意-这不是一个全有或全无的交易。在PowerShell中,您可以调用Unix工具(并使用它们的文本处理或PowerShell的文本处理)。你也可以从Unix工具中调用PowerShell来获取文本。

再次强调,这里没有宗教信仰,我们的重点是为您提供成功所需的工具。这就是为什么我们如此热衷于反馈。让我们知道我们在工作中哪里失败了,或者你在哪里没有你需要的工具,我们会把它列在清单上,然后开始处理。

坦率地说,我们正在从30年的坑里挖出来,所以还需要一段时间。也就是说,如果你拿起Windows Server 2008 /R2的测试版和/或我们的服务器产品的测试版,我想你会惊讶地发现这个漏洞很快就被填满了。

至于使用情况,到目前为止我们已经有350万次下载量。这并不包括在Windows Server 2008中使用它的人,因为它是作为可选组件包含的,不需要下载。

V2将在所有版本的Windows中发布。它将在默认情况下开启所有版本,除了服务器核心,在那里它是一个可选组件。在Windows 7/Windows Server 2008 R2发布后不久,我们将在所有平台(Windows XP及以上)上发布V2。换句话说,您在学习方面的投资将适用于非常多的机器/环境。

最后一个评论。如果/当你开始学习PowerShell,我想你会很开心的。大部分设计都受到我们Unix背景的严重影响,所以虽然我们非常不同,但你会很快学会(在你不再抱怨它不是Unix之后:-))。

我们知道人们用于学习的预算非常有限——这就是为什么我们非常重视一致性。你会学到一些东西,然后你会一遍又一遍地使用它。

实验!享受吧!参与!

这里有很多很棒的答案,这是我的看法。PowerShell是准备好了,如果你是…例子:

grep = "Select-String -Pattern"

sort = " sort - object "

uniq = "Get-Unique"

file = "Get-Item"

cat = "Get-Content"

Perl/AWK/Sed不是命令,而是实用程序,因此很难比较,但在PowerShell中几乎可以做所有事情。

我还没有看到PowerShell真正流行起来,至少现在还没有。因此,除非团队中的其他人已经知道它,否则学习它可能不值得。

对于您的困境,您最好使用其他人可以支持的脚本语言,如您提到的Perl或Ruby或Python。

我认为这在很大程度上取决于你需要做什么。就我个人而言,我一直在为自己的个人脚本使用Python,但我知道当我开始编写一些东西时,我永远无法将其传递下去——所以我尽量不做任何太有革命性的事情。

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

无论如何,我都不是一个非常有经验的PowerShell用户,但是我接触到的一点点PowerShell给我留下了深刻的印象。您可以将内置的cmdlet链接在一起,以完成您在Unix提示符下可以完成的任何事情,并且还有一些额外的优点,用于执行诸如导出到CSV、HTML表以及更深入的系统管理类型的作业。

如果你真的需要像sed这样的东西,总有UnixUtils或GnuWin32,你可以很容易地与PowerShell集成。

作为一个长期的Unix用户,我在习惯命令命名方案时遇到了一些麻烦,如果我了解更多的。net,我肯定会从中受益更多。

所以本质上,我认为如果windows独有的特性不构成问题,它是非常值得学习的。