我正在争论我是否应该学习PowerShell,还是坚持使用Cygwin/Perl脚本/Unix shell脚本等等。
PowerShell的好处是,没有Cygwin的队友可以更容易地使用脚本;然而,我不知道我是否真的会写那么多通用脚本,或者人们是否会使用它们。
Unix脚本功能如此强大,PowerShell是否足以让我们切换到它呢?
以下是我在PowerShell中寻找的一些具体内容(或等效内容):
grep
排序
uniq
Perl (PowerShell与Perl的能力有多接近?)
AWK
sed
File(提供文件信息的命令)
等。
PowerShell中的cmdlet非常好,工作可靠。因为我是一名Java/ c#开发人员,所以它们的面向对象性非常吸引我,但这并不是一个完整的集合。由于它是面向对象的,因此它错过了POSIX工具集(例如awk和sed)的许多文本流成熟度。
The best answer I've found to the dilemma of loving OO techniques and loving the maturity in the POSIX tools is to use both! One great aspect of PowerShell is that it does an excellent job piping objects to standard streams. PowerShell by default uses an object pipeline to transport its objects around. These aren't the standard streams (standard out, standard error, and standard in). When PowerShell needs to pass output to a standard process that doesn't have an object pipeline, it first converts the objects to a text stream. Since it does this so well, PowerShell makes an excellent place to host POSIX tools!
最好的POSIX工具集是GnuWin32。它确实需要超过5秒钟的时间来安装,但这是值得的,据我所知,它不会修改你的系统(注册表,c:\windows\*文件夹等),除了将文件复制到你指定的目录。这是非常好的,因为如果您将工具放在共享目录中,许多人可以同时访问它们。
GnuWin32安装说明
下载并执行exe(它来自SourceForge网站)指向一个合适的目录(我将使用C:\bin)。它会在那里创建一个GetGnuWin32目录,你将在其中运行download.bat,然后是install.bat(不带参数),之后会有一个C:\bin\GetGnuWin32\gnuwin32\bin目录,这是Windows机器上曾经存在过的最有用的文件夹。将该目录添加到路径中,就可以开始了。
作为一个从1997年到2010年专注于Windows企业开发的人,显而易见的答案是PowerShell,因为前面给出的所有好的理由(例如,它是微软企业战略的一部分;与Windows/COM/.NET集成良好;使用对象而不是文件提供了一个“更丰富的”编码模型)。出于这个原因,我在过去两年左右的时间里一直在使用和推广PowerShell,并明确地相信我是在遵循“比尔之言”。
然而,作为一个实用主义者,我不再确定PowerShell是一个很好的答案。虽然这是一款出色的Windows工具,并且为填补Windows命令行这一历史性的漏洞提供了非常必要的一步,但我们都看到微软对消费者计算的控制正在下滑,微软似乎越来越有可能面临一场大规模的战斗,以保持其操作系统对未来企业的重要性。
事实上,鉴于我发现我的工作越来越多地处于不同的环境中,我发现目前使用Bash脚本要有用得多,因为它们不仅可以在Linux、Solaris和Mac OS X上工作,而且还可以在cygwin的帮助下在Windows上工作。
因此,如果您相信操作系统的未来是商品化的,而不是垄断的,那么选择一种灵活的开发工具策略,在可行的情况下远离专有工具似乎是有意义的。然而,如果你认为你的未来被所有的雷德蒙德所主宰,那么就选择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之后:-))。
我们知道人们用于学习的预算非常有限——这就是为什么我们非常重视一致性。你会学到一些东西,然后你会一遍又一遍地使用它。
实验!享受吧!参与!